需要一些帮助来分析在 Linux 服务器上运行的 apache 和 php 进程。它是一款 8 核英特尔处理器,配备 4GB 内存。当网站上面运行时,顶部显示如下。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
23459 username1 16 0 151m 27m 8388 S 11.3 0.7 0:11.71 php5
23730 username1 16 0 151m 28m 8388 S 11.3 0.7 0:03.87 php5
23458 username1 16 0 151m 28m 8388 S 3.0 0.7 0:19.20 php5
16202 mysql 15 0 459m 38m 4624 S 0.7 1.0 62:33.81 mysqld
24141 nobody 15 0 311m 5832 2304 S 0.3 0.1 0:00.03 httpd
为什么访问网站时命令显示 php5。apache 和 php 都已预先配置,因此不确定那里做了什么。尝试在不同的服务器上设置相同的站点和数据库,但该服务器上的进程始终显示 httpd 而不是 php5。该站点使用 mysql 数据库。
问题是,当网站被大约 16 个用户访问时,服务器负载似乎会持续到 5.x 左右。当给出 free -m 命令时,输出显示
total used free shared buffers cached
Mem: 3941 3727 213 0 236 2734
-/+ buffers/cache: 756 3184
Swap: 4095 0 4095
很多内存似乎都在缓存中,而可用内存较少。即使网站没有被访问,也就是闲置了大约 2 天,可用内存也只显示 190。当访问网站时,可用内存似乎会一直到 90mb,然后增加到大约 150mb。它似乎总是保持在 200mb 左右。这是否与显示 5.x 的服务器负载有关。添加更多 RAM 可以解决负载问题吗?
答案1
为什么访问网站时命令显示 php5。apache 和 php 都已预先配置,因此不确定那里做了什么。尝试在不同的服务器上设置相同的站点和数据库,但该服务器上的进程始终显示 httpd,而不是 php5
因为在第一台服务器上,PHP 作为 CGI 或快速 CGI 运行,而在第二台服务器上它作为 apache 模块运行。
您的 httpd 进程的虚拟大小看起来很巨大 - 您正在运行多少个服务器?
问题是,当网站被大约 16 个用户访问时,服务器负载似乎一直持续到 5.x 左右。
由于对代码和使用模式了解不多,因此很难做出概括,但是考虑到机器的规格和用户数量,我预计不会看到对负载有任何重大影响。(我曾经担心,当 1GHz / 512Mb LAMP 机箱农场的负载上升到 0.8 以上时,每个机箱处理大约 120 个并发请求)。
我怀疑这台巨型机器的配置出了问题。当然,如果它运行的是 CGI 接口,那么你确实应该立即解决这个问题。
我很困惑为什么它的行为如此糟糕——你没有在 httpd 进程上设置 CPU 亲和性?(man tasket)
答案2
对于第一个问题,当通过 mod_php 访问 PHP 脚本时,它们会显示为httpd
在 Web 服务器中运行。当通过 CGI 或 FCGI 访问它们时,它们会显示为php5
在这些情况下由单独的进程运行。
至于第二个问题,这个网站上有很多重复的问题;我邀请你去搜索。我将其保留为“你没有记忆问题”。