我想知道是否有人能帮我解释一下为什么要用这么多内存。我运行的是一台低端机器,512mb 内存,装有 Centos 6.3、Nginx、PHP 和 MySQL,但当我运行 ps aux 时,Apache 会出现,而且它占用了大量内存。
apache 1166 0.0 3.7 78620 19500 ? S Apr19 0:01 php-fpm: pool w
apache 1167 0.0 3.7 79076 19844 ? S Apr19 0:01 php-fpm: pool w
apache 1168 0.0 3.5 78312 18732 ? S Apr19 0:01 php-fpm: pool w
apache 1169 0.0 2.6 61744 13656 ? S Apr19 0:01 php-fpm: pool w
apache 1170 0.0 4.8 84744 25440 ? S Apr19 0:01 php-fpm: pool w
apache 1383 0.0 3.3 77112 17660 ? S Apr19 0:01 php-fpm: pool w
第四列是百分比 RAM 列,这意味着 Apache 使用了我服务器 RAM 的 21.6%。为什么我在运行 Nginx 时 Apache 会使用所有这些内存?
我已经检查过 Appache 是否正在运行:
/etc/init.d/httpd status
httpd is stopped
那么 Apache 没有运行,但它却在运行?我感到很困惑。
我是 Linux 新手,已经设法从头开始设置此 VPS 来托管网站,并且没有控制面板,但我不知道为什么要使用这些 RAM。php-fpm 不应该通过 Nginx 运行吗?
如果有人能帮忙就太好了。谷歌没有给出太多答案。
答案1
这并不表明 Apache 正在运行。
它表明php-fpm
正在用户帐户下运行apache
。
当然,这就是标题对于列说:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
当你用标题查看你的流程时,事情就会变得很明显:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
apache 1166 0.0 3.7 78620 19500 ? S Apr19 0:01 php-fpm: pool w
当然,由于ps aux
生成的显示内容很长,标题可能会从终端上滚出。随着您更多地使用这些命令,您最终会知道哪些列是哪些列,而无需参考标题。
答案2
不幸的是,计算出多个密切相关进程的实际内存使用情况并不简单。RSS
输出中的列ps
显示了每个进程的驻留集大小,即进程使用的物理内存量,但其中一部分内存实际上与其他进程共享,因此仅将多个进程的 RSS 值相加并不能得到正确的结果(共享内存被多次计算)。该%MEM
列有同样的问题,因为它被RSS
除以机器上的物理内存量。
在这种情况下,进程内存使用情况的更有用的指标是:
- USS(唯一集大小)——某个进程已映射的页面数,这些页面仅由该进程映射,而不由任何其他进程映射。
- PSS(比例集大小)——USS 加上每个共享页面的一部分,该部分与映射该页面的进程数成比例(例如,如果一个页面由 3 个进程共享,则报告称每个进程都使用了该页面的 1/3)。
与 RSS 不同,多个进程的 USS 和 PSS 可以有意义地相加。不幸的是,ps
即使是最新版本的 procps-ng 也无法显示这些值。有一个名为微电子它可以显示进程的 USS、PSS 和 RSS(并计算总 USS、总 PSS 以及无意义的“总 RSS”);或者您可以Pss:
从中获取值/proc/*/smaps
并使用自定义脚本对它们求和。
请注意,您需要 root 权限才能读取/proc/*/smaps
除您自己的进程之外的任何进程的数据。