一个较长的 php 进程占用了系统,平均产生峰值 > 8

一个较长的 php 进程占用了系统,平均产生峰值 > 8

我最近将我的网站从 VPS 移到了专用服务器。VPS 的速度/规格与专用服务器大致相同。它的平均负载通常约为 .7-.9(它被认为是 3 核系统)。

现在我换成了一台专用服务器,它有双核 Core(TM)2 Duo CPU E7500 @ 2.93GHz。在最低配置下,分钟平均负载与 VPS 的水平大致相同。

该应用程序每天处理大约 200000 个页面,每个页面的渲染时间不到 10 毫秒,并且包含一些小图像(约 20 张图像,每张小于 5kb)。

唯一的我有一个页面,其中包含对用户站点的 cURL 请求,该请求的超时限制为 7 秒,并且该页面每天被调用大约 6000 次(通常调用按时间分组)。

我觉得这是导致 loadavg 峰值的罪魁祸首,但我不确定如何设置我的配置以避免这些在 VPS 中不存在的令人紧张的峰值!

顺便说一下,该设置是在典型的 cPanel apache 配置上的 fcgi。

如能提供关于从哪里开始配置/调试的任何指示,我们将不胜感激!

谢谢!!!

这是我得到的典型峰值的 top 输出。你会看到 CPU 正在懒洋洋地思考,如果我“cat /proc/cpuinfo”,它就是 @1600MHz!!!!(它正在节流)

-----------------------------------------------------------------------------
top - 17:02:39 up 16 days, 15:20,  1 user,  load average: 6.39, 2.28, 1.57
Tasks: 161 total,   1 running, 160 sleeping,   0 stopped,   0 zombie
Cpu(s): 12.4%us,  1.8%sy,  0.0%ni, 81.8%id,  3.3%wa,  0.2%hi,  0.5%si,  0.0%st
Mem:   4046576k total,  4012780k used,    33796k free,   272176k buffers
Swap:  2104504k total,      104k used,  2104400k free,  2497684k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
16800 nobody    18   0  422m  13m 2148 S  2.7  0.3   0:16.73 httpd
23746 nobody    18   0  419m 9796 2132 S  2.7  0.2   0:01.54 httpd
 2152 nobody    18   0  422m  22m  10m S  2.3  0.6   0:51.42 httpd
 2109 nobody    18   0  423m  16m 2872 S  2.0  0.4   0:49.05 httpd
 2113 nobody    18   0  422m  14m 2268 S  2.0  0.4   0:47.32 httpd
 2160 nobody    18   0  423m  14m 2252 S  2.0  0.4   0:50.83 httpd
 2195 nobody    18   0  487m  15m 2256 S  2.0  0.4   0:50.64 httpd
 8452 nobody    18   0  421m  22m  10m S  1.7  0.6   0:38.82 httpd
18044 sitenam   15   0  137m  16m 8128 S  1.7  0.4   0:02.93 php
 2150 nobody    18   0  422m  14m 2232 S  1.3  0.4   0:48.56 httpd
 2154 nobody    18   0  422m  22m  10m S  1.3  0.6   0:47.79 httpd
 2156 nobody    18   0  423m  23m  10m S  1.3  0.6   0:51.32 httpd
 2158 nobody    18   0  422m  22m  10m S  1.3  0.6   0:51.88 httpd
23919 nobody    18   0  417m 8368 2128 S  1.3  0.2   0:01.13 httpd
18045 sitenam   16   0  139m  18m 8068 S  1.0  0.5   0:03.02 php
 2111 nobody    18   0  549m  14m 2176 S  0.7  0.4   0:51.74 httpd
 5097 mysql     15   0  280m  34m 4596 S  0.7  0.9  13:02.88 mysqld
16981 sitenam   16   0  137m  16m 8080 S  0.7  0.4   0:03.01 php
18043 sitenam   16   0  138m  17m 8064 S  0.7  0.4   0:01.61 php
 2102 nobody    18   0  438m  33m  10m S  0.3  0.8   0:49.20 httpd
19566 sitenam   15   0 12744 1132  808 R  0.3  0.0   0:01.67 top
23800 nobody    18   0  418m 9164 2124 S  0.3  0.2   0:01.72 httpd
    1 root      15   0 10352  696  588 S  0.0  0.0   0:06.01 init

答案1

如果您还没有完成此操作,请关闭 apache 中的 keepalive。Keepalive 将在配置中指定的秒数内保持连接打开。如果您正在提供大量包含图像的页面,它将保持连接打开。

例如,某些浏览器会同时打开 4-6 个与 Web 服务器的连接。因此,如果是这样,则每个客户端在任意给定时间都会打开 4-6 个连接,并且如果您的 keepalive 超时为 120(我认为这是默认值),并且在这 2 分钟内您有 200 个客户端...您的服务器可能有问题。

所以它关闭它并重新启动 apache

KeepAlive Off

我认为这是由于您的 top 造成的。实际上没有任何东西占用那么多 CPU。所以请先尝试一下。

top 不仅仅是对 CPU 的衡量。它也是磁盘 I/O 和 RAM 的衡量。

答案2

显然我的问题有点愚蠢。非常感谢 Mike 帮助我设置了 keepalive。这才是真正发现问题的开始。

cURL 脚本从来不会关闭文件描述符,所以我打开了很多文件。此外,网络速度下降到 3MB/秒,这实际上造成了系统瓶颈。

自从我开始关闭打开的 cURL 文件描述后,我就感觉只有网络才是最大的浪费。

我开始改变的另一件事是不再使用 MDB2。与原生 mysql_ 调用相比,它的速度非常差。

多谢!

相关内容