运行 Nginx 时 Apache 被 php-fpm 使用吗?

运行 Nginx 时 Apache 被 php-fpm 使用吗?

我想知道是否有人能帮我解释一下为什么要用这么多内存。我运行的是一台低端机器,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除您自己的进程之外的任何进程的数据。

相关内容