1

Рассмотрим следующий вывод pmap простого tail процесса в Linux:

$ pmap -x 3974
3974:   tail -F /var/log/syslog
Address           Kbytes     RSS   Dirty Mode   Mapping
0000000000400000      60      36       0 r-x--  tail
000000000060e000       4       4       4 r----  tail
000000000060f000       4       4       4 rw---  tail
0000000000610000     132      12      12 rw---    [ anon ]
00007ffff7775000    2792      44       0 r----  locale-archive
00007ffff7a2f000    1672     432       0 r-x--  libc-2.17.so
00007ffff7bd1000    2048       0       0 -----  libc-2.17.so
00007ffff7dd1000      16      16      16 r----  libc-2.17.so
00007ffff7dd5000       8       8       8 rw---  libc-2.17.so
00007ffff7dd7000      16      12      12 rw---    [ anon ]
00007ffff7ddb000     132     104       0 r-x--  ld-2.17.so
00007ffff7fd7000      12      12      12 rw---    [ anon ]
00007ffff7ff7000      12      12      12 rw---    [ anon ]
00007ffff7ffa000       8       4       0 r-x--    [ anon ]
00007ffff7ffc000       4       4       4 r----  ld-2.17.so
00007ffff7ffd000       8       8       8 rw---  ld-2.17.so
00007ffffffde000     132      24      24 rw---    [ stack ]
ffffffffff600000       4       0       0 r-x--    [ anon ]
----------------  ------  ------  ------
total kB            7064     736     116

Учитывая процесс и его состояние, я могу получить ps для вывода различной информации об использовании памяти:

$ ps -lp 3974
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S  1000  3974  3972  0  80   0 -  1766 -      pts/0    00:00:00 tail

$ ps vp 3974
  PID TTY      STAT   TIME  MAJFL   TRS   DRS   RSS %MEM COMMAND
 3974 pts/0    Ss+    0:00      3    57  7006   660  0.0 tail -F /var/log/syslog

$ ps lp 3974
F   UID   PID  PPID PRI  NI    VSZ   RSS WCHAN  STAT TTY        TIME COMMAND
0  1000  3974  3972  20   0   7064   660 -      Ss+  pts/0      0:00 tail -F /var/log/syslog

Однако, за исключением поля VSZ из вывода l , все они более или менее отличаются от информации, которую дает pmap об отдельных отображениях. Самым странным из всех является, очевидно, поле SZ из вывода -l , которое я просто не могу понять, на что оно рассчитывает. Я не нашел никакого объяснения того, что он делает в какой-либо документации (на странице руководства упоминается что-то загадочное в "основном изображении", но он не определяет этот термин, и я не вижу никакой комбинации полей из pmap которая бы добавила до 1766 года или даже что-нибудь отдаленно близкое к этому). Кто-нибудь знает?

Однако поле RSS на выходах v и l также немного отличается от pmap , как и поле DRS на выходе v . Хотя разница не так уж и велика, она все же немного сбивает меня с толку.

1 ответ1

1

Поле SZ , которое описывается документацией ps как (для полноты):

размер в физических страницах основного образа процесса. Это включает в себя текст, данные и пространство стека. Отображения устройств в настоящее время исключены; это может быть изменено. Смотри всз и рсс.

кажется, совпадает с первым числом, сообщенным procfs в /proc/$PID/statm:

$ tailf /var/log/vmware-installer &; PID=$!
$ pmap -x $PID | tail -n 1
total kB            6788     616     132
$ ps -lp $PID
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S   516 13848 13657  0  85   5 -  1697 -      pts/7    00:00:00 tailf
$ cat /proc/$PID/statm
1697 153 120 2 0 81 0

Формат statm описан в документации ядра (/usr/src/linux/Documentation/filesystems/proc.txt):

Table 1-3: Contents of the statm files (as of 2.6.8-rc3)
..............................................................................
Field    Content
size     total program size (pages)         (same as VmSize in status)
resident size of memory portions (pages)       (same as VmRSS in status)
shared   number of pages that are shared       (i.e. backed by a file)
trs      number of pages that are 'code'       (not including libs; broken,
                                                        includes data segment)
lrs      number of pages of library            (always 0 on 2.6)
drs      number of pages of data/stack         (including libs; broken,
                                                        includes library text)
dt       number of dirty pages                 (always 0 on 2.6)
..............................................................................

Это не слишком информативно, но, по крайней мере, показывает, что само ядро linux сообщает об этом числе.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .