2012-01-30 10 views
5

Piszę narzędzie do analizy zrzutu pamięci i jedną rzeczą, którą chciałbym wydrukować, jest oszacowanie, ile pamięci wirtualnej proces wykorzystywał w czasie zrzutu. Te podstawowe zrzuty mogą być spowodowane awarią lub mogą być ręcznie pobrane przy użyciu gcore (na przykład dla rozmiaru). Zasadniczo chciałbym wydrukować odpowiednik kolumny PS VSZ.W jaki sposób jeden przybliża używane pamięci wirtualnej (VSZ) przy użyciu zrzutu pamięci i gdb w systemie Linux?

Zajrzałem do readelf i gdb i skupiłem się na tym ostatnim. Na przykład, mam prosty program, który po prostu zawiesza się i widzę w 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 

biorę rdzeń używając gcore, w którym momencie jest za pomocą 4,206,592 bajtów VSŽ. Następnie napisałem szybki skrypt, który analizuje dane wyjściowe i sumuje zakresy adresów, otrzymując 1814828 bajtów. Próbowałem także info proc mappings, ale wydaje się, że działa tylko wtedy, gdy proces jest uruchomiony.

Wszelkie pomysły?

+0

Po prostu próbowałem "sekcji informacji o konserwacji" i otrzymałem nieco większą, ale podobną liczbę 1 817 288 bajtów. – user379184

Odpowiedz

1

W moim przypadku wyjście z gdb i PS pokazuje same informacje

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

pmap również pokazują te same 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 

Oto gdb informacji proc mapowanie

(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 wyświetlasz więcej informacji o procesie?

Powiązane problemy