Linux 的 ps 命令实际显示哪些内存统计信息?

Linux 的 ps 命令实际显示哪些内存统计信息?

考虑Linux 上pmap一个简单进程的以下输出:tail

$ 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,我似乎根本无法弄清楚它在计算什么。我还没有在任何文档中找到关于它做什么的解释(手册页提到了一些关于“核心映像”的神秘内容,但没有定义这个术语,我看不出任何字段组合加起来会达到pmap1766 或甚至任何接近这个数字的东西)。有人知道吗?

但是,和输出RSS的字段也与 略有不同,输出中的字段也略有不同。虽然差别不是很大,但还是让我有点困惑。vlpmapDRSv

答案1

该字段,在的文档SZ中描述为(为了完整性):ps

进程核心映像的物理页面大小。这包括文本、数据和堆栈空间。设备映射目前不包括在内;这可能会发生变化。请参阅 vsz 和 rss。

似乎与procfs中报告的第一个数字相同/proc/$PID/statm

$ tailf /var/log/vmware-installer &; PID=$!
$ pmap -x $PID | tail -n 1
总 kB 6788 616 132
$ ps -lp $PID
FS UID PID PPID C PRI NI 地址深圳WCHAN TTY 时间命令
0 南 516 13848 13657 0 85 5 -  1697- pts/7 00:00:00 tailf
$ cat /proc/$PID/statm
169715312020810

的格式statm在内核文档()中描述/usr/src/linux/Documentation/filesystems/proc.txt

表 1-3:statm 文件的内容(截至 2.6.8-rc3)
...........................................................................
字段内容
size 总程序大小(页面)(状态与 VmSize 相同)
内存部分(页面)的驻留大小(状态与 VmRSS 相同)
共享的页面数(即由文件支持)
trs 页面为“代码”(不包括库;损坏,
                                                        包括数据段)
lrs 库的页数(在 2.6 上始终为 0)
drs 数据/堆栈的页数(包括库;损坏,
                                                        包括图书馆文本)
dt 脏页数(在 2.6 上始终为 0)
...........................................................................

这并没有提供太多信息,但至少表明 Linux 内核本身报告了该数字。

相关内容