2012-01-30 12 views
5

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?

+0

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

Respuesta

1

En mi caso, la salida del BGF y ps muestra la misma información

root  3976 0.0 0.0 1636 640 tty6  Ss+ 08:00 0:00 /sbin/mingetty tty6 

pmap también muestran el mismo 1636

3976: /sbin/mingetty tty6 
00110000  4K r-x-- [ anon ] 
001c3000 100K r-x-- /lib/ld-2.5.so 
001dc000  4K r-x-- /lib/ld-2.5.so 
001dd000  4K rwx-- /lib/ld-2.5.so 
001e0000 1256K r-x-- /lib/libc-2.5.so 
0031a000  8K r-x-- /lib/libc-2.5.so 
0031c000  4K rwx-- /lib/libc-2.5.so 
0031d000  12K rwx-- [ anon ] 
08048000  12K r-x-- /sbin/mingetty 
0804b000  4K rw--- /sbin/mingetty 
08dd3000 132K rw--- [ anon ] 
b7f69000  8K rw--- [ anon ] 
b7f79000  4K rw--- [ anon ] 
bff4d000  84K rw--- [ stack ] 
total  1636K 

Aquí es información GDB mapeo proc

(gdb) info proc mappings 
process 3976 

cmdline = '/sbin/mingetty' 
cwd = '/' 
exe = '/sbin/mingetty' 
Mapped address spaces: 

    Start Addr End Addr  Size  Offset objfile 
     0x110000 0x111000  0x1000 0x110000   [vdso] 
     0x1c3000 0x1dc000 0x19000   0  /lib/ld-2.5.so 
     0x1dc000 0x1dd000  0x1000 0x19000  /lib/ld-2.5.so 
     0x1dd000 0x1de000  0x1000 0x1a000  /lib/ld-2.5.so 
     0x1e0000 0x31a000 0x13a000   0  /lib/libc-2.5.so 
     0x31a000 0x31c000  0x2000 0x139000  /lib/libc-2.5.so 
     0x31c000 0x31d000  0x1000 0x13b000  /lib/libc-2.5.so 
     0x31d000 0x320000  0x3000 0x31d000   
    0x8048000 0x804b000  0x3000   0  /sbin/mingetty 
    0x804b000 0x804c000  0x1000  0x2000  /sbin/mingetty 
    0x8dd3000 0x8df4000 0x21000 0x8dd3000   
    0xb7f69000 0xb7f6b000  0x2000 0xb7f69000   
    0xb7f79000 0xb7f7a000  0x1000 0xb7f79000   
    0xbff4d000 0xbff62000 0x15000 0xbff4d000   [stack] 

Puede ¿Muestra más información sobre el proceso?

Cuestiones relacionadas