Estoy escribiendo una herramienta para el análisis de volcado del núcleo y una cosa que me gustaría imprimir es una estimación de cuánta memoria virtual estaba usando el proceso en el momento del volcado. Estos volcados del núcleo podrían deberse a bloqueos o podrían tomarse manualmente usando gcore (por ejemplo, para el tamaño). Básicamente, me gustaría imprimir el equivalente de la columna PS VSZ.¿Cómo se usa una memoria virtual aproximada (VSZ) utilizando un volcado de núcleo y gdb en Linux?
He investigado readelf y gdb y me he centrado en este último. Por ejemplo, tengo un programa sencillo que sólo se bloquea y veo en PS:
$ ps auxwww | grep a.out
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 16644 0.0 0.0 4108 472 pts/5 S+ 13:51 0:00 ./a.out
Tomo un núcleo usando gcore, momento en el que se trata de utilizar 4,206,592 bytes Vsz. Luego escribí un script rápido que analiza la salida info target
y suma los rangos de direcciones y obtengo 1,814,528 bytes. También probé info proc mappings
, pero parece que solo funciona si el proceso se está ejecutando.
¿Alguna idea?
Acabo de probar 'secciones de información de mantenimiento' y obtuve un número un poco más grande, pero similar, de 1,817,528 bytes. – user379184