Linux 服务器上的进程和内存问题

Linux 服务器上的进程和内存问题

需要一些帮助来分析在 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在这些情况下由单独的进程运行。

至于第二个问题,这个网站上有很多重复的问题;我邀请你去搜索。我将其保留为“你没有记忆问题”。

相关内容