Как примерная виртуальная память используется (VSZ) при использовании дампа ядра и gdb в Linux? - PullRequest
5 голосов
/ 31 января 2012

Я пишу инструмент для анализа дампа памяти, и мне хотелось бы напечатать оценку объема виртуальной памяти, который процесс использовал во время создания дампа. Эти дампы ядра могут быть вызваны сбоями или могут быть получены вручную с помощью gcore (например, для определения размера). По сути, я хотел бы напечатать эквивалент столбца PS VSZ.

Я изучил readelf и gdb и сосредоточился на последнем. Например, у меня есть простая программа, которая просто зависает, и я вижу в 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

Я беру ядро, используя gcore, и в этот момент оно использует 4 206 592 байта VSZ. Затем я написал быстрый скрипт, который анализирует info target вывод и суммирует диапазоны адресов, и я получаю 1 814 528 байт. Я также попробовал info proc mappings, но, похоже, это работает, только если процесс запущен.

Есть идеи?

1 Ответ

1 голос
/ 07 мая 2012

В моем случае вывод gdb и ps показывает одинаковую информацию

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

pmap также показывает тот же 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

Вот отображение информации GDB

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

Можете ли вы показать больше информации о процессе?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...