我想测量 Apache 服务器的内存利用率。我可以使用 pmap/ps 命令并传递 httpd 的所有进程 ID,然后将其作为总利用率吗?
在大多数博客中,他们认为 ps 命令对示例程序给出了正确的结果,但对 apache 却没有给出正确的结果
在 pmap 中
pmap PID1 PID2....
pmap 似乎提供的信息不仅仅是 RAM 利用率。Unix/Perl 中是否有任何命令可以让我获取有关内存使用的正确信息?
答案1
我的 Python 脚本是
https://raw.github.com/pixelb/scripts/master/scripts/ps_mem.py
只需运行 ps_mem.py,它就会告诉您 httpd 在其分叉的所有进程中使用了多少空间。您无法真正使用 res memory 之类的 ps 输出来总结,因为它所说的进程正在使用的大量内存在进程之间共享。例如,我的一台服务器中的 apache 进程示例是
apache 6799 0.2 0.7 590052 63064 ? S 12:56 0:07 /usr/sbin/httpd
apache 6802 0.3 0.7 589084 60804 ? S 12:57 0:08 /usr/sbin/httpd
apache 6803 0.2 0.7 588004 59748 ? S 12:57 0:05 /usr/sbin/httpd
让人觉得每个进程大约使用 60MB 的 RAM。我打开了 100 个进程,所以有人可能会认为它使用了 600MB 的 RAM。
从脚本的输出来看,实际内存是 365
286.6 MiB + 79.3 MiB = 365.9 MiB httpd (38)