Dump de memoria de otro proceso

Horst von Brand vonbrand en inf.utfsm.cl
Mar Ago 23 22:24:09 CLT 2005


Bernardo Suarez <bsuarez en gmail.com> wrote:
> Tengo un set de programas en perl que corren como daemon en un
> sistema, que fueron creados ordenadamente via packages, lo que no está
> en clases está en funciones, etc.

Te saco el sombrero.

> Se supone que perl realiza garbage collection, pero veo que la memoria
> virtual usada por los programas siempre aumenta, hasta dejarme sin
> memoria.

Ojo, reusa la memoria de objetos que son inalcanzables. Si creas hashes y
metes cosas y cosas y cosas alli, tarde o temprano cualquier cosa rebalsa.
Tienes que deshacerte de los hashes (dejar el ambito que define el hash,
pero ojo que pueden quedar referencias dando vueltas...). Y/o preocuparte
de liberar los objetos contenidos (asignando undef a los elementos que ya
no uses).

> Seguramente el problema está en una de las clases que son comunes a los
> programas (o programé particularmente mal en esa epoca) pero llevo harto
> tiempo sin encontrar la falla.  Por lo tanto me ayudaría mucho alguna
> utilidad que me permita hacer un dump hexadecimal de la memoria usada por
> otro proceso. Como no he podido detectar que parte del programa se come
> la memoria, quizas sea una buena pista saber con que la estoy
> llenando... Alguien tiene/conoce/sabe como hacer algo así?

Puedes attacharte a un proceso con gdb(1), y de alli controlarlo. O matarlo
via alguna sen~al que genere un core (signal(7)). Supongo que tontear con
lo contenido en /proc puede servir...
-- 
Dr. Horst H. von Brand                   User #22616 counter.li.org
Departamento de Informatica                     Fono: +56 32 654431
Universidad Tecnica Federico Santa Maria              +56 32 654239
Casilla 110-V, Valparaiso, Chile                Fax:  +56 32 797513


Más información sobre la lista de distribución Linux