pmap计算的私有内存,虚拟内存大小和常驻内存大小的组合?

pmap计算的私有内存,虚拟内存大小和常驻内存大小的组合?

可以使用 ps 命令获取进程的虚拟内存大小和常驻内存大小:

$ ps aux | grep apache2
USER       PID  %CPU %MEM  VSZ  RSS     TTY   STAT START    TIME    COMMAND
www-data 31141  0.0  0.3 163864 24008 ?        S    16:15   0:01 /usr/sbin/apache2 -k start

现在,虚拟内存和驻留内存无法提供进程真实内存占用的准确精度,因为它还考虑了共享库。

所以更好的解决方案是使用pmap来获取进程的真实内存使用情况。所以这是使用与上面相同的过程的 pmap 的输出:

$ sudo pmap -d 31141
31141:   /usr/sbin/apache2 -k start
Address           Kbytes Mode  Offset           Device    Mapping
00007f85bbb82000      28 r-x-- 0000000000000000 0fc:00000 libnss_dns-2.15.so
...
...
mapped: 163864K    writeable/private: 28420K    shared: 592K

所以“writable/private”值是进程的私有内存,大约是28 mb。我的问题:这个私有内存只是主内存(RAM)还是这个数字还可能包括交换空间?

答案1

我发现这篇文章的标题是:了解 Linux 上的内存使用情况我认为它比我之前在 linuxquestions.org 网站上找到的更好,标题为:如何准确测量内存使用情况?

摘自 了解记忆...帖子

皮秒输出
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
dbunker   3468  0.0  2.7  25400 14452 ?        S    20:19   0:00 kdeinit: kedit
映射输出
Address   Kbytes Mode  Offset           Device    Mapping
08048000      40 r-x-- 0000000000000000 0fe:00000 kdeinit
08052000       4 rw--- 0000000000009000 0fe:00000 kdeinit
08053000    1164 rw--- 0000000008053000 000:00000   [ anon ]
40000000      84 r-x-- 0000000000000000 0fe:00000 ld-2.3.5.so
40015000       8 rw--- 0000000000014000 0fe:00000 ld-2.3.5.so
40017000       4 rw--- 0000000040017000 000:00000   [ anon ]
... (trimmed) ...
mapped: 25404K    writeable/private: 2432K    shared: 0K
描述正在发生的事情

如果你查看输出,你会发现Kbytes数最大的行通常是包含的共享库的代码段(以“lib”开头的是共享库)。这样做的好处是它们可以在进程之间共享。如果您分解出进程之间共享的所有部分,则最终会得到“可写/私有”总数,该总数显示在输出的底部。这可以被认为是该过程的增量成本,排除了共享库。因此,运行此 KEdit 实例的成本(假设所有共享库都已加载)约为 2 MB。这与 ps 报道的 14 或 25 兆字节完全不同。

进程 X 使用了多少交换空间?

您可以使用以下命令找出进程正在使用的交换空间:

$ grep VmSwap /proc/$(pidof chrome | awk '{print $1}')/status
VmSwap:     1324 kB

上面是获取第一个chrome返回VmSwap值的PID。

内存统计器

如果您正在寻找准确的内存测量值,您可能想看看这个工具,它的名字是memstat

cyberciti.biz 上有一个教程,标题为:Linux:找出什么占用了所有虚拟内存这体现memstat在行动中。

参考

相关内容