我的网站在一天中的某些时候非常慢,我正在寻找原因。我目前正在研究 Apache 内存使用情况,我有 2 个工具可以告诉我它当前使用了多少 RAM:
阿帕奇2伙伴:
curl -sL https://raw.githubusercontent.com/richardforth/apache2buddy/master/apache2buddy.pl | perl
返回:
apache2 is currently using 8849.18 MB of memory.
然后我有这个命令使用ps
:
ps -ylC apache2 --sort:rss | awk '{sum+=$8; ++n} END {print "Tot="sum"("n")";print "Avg="sum"/"n"="sum/n/1024"MB"}'
返回:
Tot=9047860(258)
Avg=9047860/258=34.2473MB
因此,根据这一行,Apache2 使用了大约 9GB 的 RAM,这与 Apache2Buddy 的结果相匹配。
但是,当我运行时,htop
我得到的是:
总内存使用量似乎只有2.7GB。为什么结果差距如此巨大?
答案1
驻留大小包括共享页面:这包括共享库,在本例中包括apache2
二进制文件本身。您使用的工具对每个进程的所有共享内存进行一次计数,但它们仅在物理内存中出现一次,因此它们使用的数量远远少于您添加驻留大小的预期。
为了更好地了解进程的实际内存使用情况,您必须查看/proc/<pid>/smaps
;对于其中描述的每个部分,比较Rss
值和Shared_...
值。内核尝试通过计算每个进程的 RSS 份额(如 所示)来帮助您执行您感兴趣的计算Pss
。