2012-01-30 13 views
5

Sto scrivendo uno strumento per l'analisi core dump e una cosa che vorrei stampare è una stima di quanta memoria virtuale il processo stava usando al momento del dump. Questi core dump potrebbero essere dovuti a crash o potrebbero essere rilevati manualmente usando gcore (ad esempio per il dimensionamento). In sostanza, mi piacerebbe stampare l'equivalente della colonna PS VSZ.Come si approssima la memoria virtuale utilizzata (VSZ) usando un core dump e gdb su Linux?

Ho esaminato subito e gdb e mi sono concentrato su quest'ultimo. Per esempio, ho un semplice programma che si blocca solo e vedo in 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 

prendo un nucleo utilizzando gcore, a quel punto sta usando 4,206,592 byte VSZ. Poi ho scritto uno script veloce che analizza l'output info target e somma gli intervalli di indirizzi e ottengo 1,814,528 byte. Ho anche provato info proc mappings ma sembra funzionare solo se il processo è in esecuzione.

Qualche idea?

+0

Ho appena provato 'sezioni di informazioni di manutenzione' e ho ottenuto un numero leggermente maggiore, ma simile di 1.817.528 byte. – user379184

risposta

1

Nel mio caso l'output di gdb e ps mostra le stesse informazioni

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

pmap mostrano anche lo stesso 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 

Ecco informazioni gdb proc mappatura

(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] 

Can mostri più informazioni sul processo?

Problemi correlati