【发布时间】:2014-04-29 23:48:51
【问题描述】:
我正在通过从 Proc 文件系统读取值在 Perl 中编写小型进程监控脚本。现在我可以使用 /proc/[pid]/status 和 /proc/[pid]/io 获取线程数、进程状态、读写字节数强>文件。现在我想计算一个进程的内存使用量。经过搜索,我知道内存使用情况会出现 /proc/[pid]/statm。但我仍然无法弄清楚该文件需要哪些必要字段来计算内存使用量。谁可以帮我这个事?提前致谢。
【问题讨论】:
我正在通过从 Proc 文件系统读取值在 Perl 中编写小型进程监控脚本。现在我可以使用 /proc/[pid]/status 和 /proc/[pid]/io 获取线程数、进程状态、读写字节数强>文件。现在我想计算一个进程的内存使用量。经过搜索,我知道内存使用情况会出现 /proc/[pid]/statm。但我仍然无法弄清楚该文件需要哪些必要字段来计算内存使用量。谁可以帮我这个事?提前致谢。
【问题讨论】:
您可能想要resident 或size。来自kernel.org。
【讨论】:
很难知道进程的“内存使用量”是多少。 VM 大小和 RSS 是已知的、可测量的值。
但你可能想要的是别的东西。在实践中,“VM 大小”似乎太高,而 RSS 往往又太低。
主要问题有:
所以你真的需要考虑什么才是“内存使用”。
在我看来,逻辑上是这样的:
我不知道有什么实用程序可以做到这一点。不过,这似乎并不简单,并且涉及(至少)读取 /proc/pid/pagemap 和可能的其他一些 /proc 接口,其中一些是 root-only。
【讨论】:
另一种(不那么简单,但更精确)的可能性是解析/proc/123/maps 文件,或许可以使用pmap 实用程序。它为您提供有关“虚拟内存”的信息(即进程的地址空间)。
【讨论】: