![一个较长的 php 进程占用了系统,平均产生峰值 > 8](https://linux22.com/image/530825/%E4%B8%80%E4%B8%AA%E8%BE%83%E9%95%BF%E7%9A%84%20php%20%E8%BF%9B%E7%A8%8B%E5%8D%A0%E7%94%A8%E4%BA%86%E7%B3%BB%E7%BB%9F%EF%BC%8C%E5%B9%B3%E5%9D%87%E4%BA%A7%E7%94%9F%E5%B3%B0%E5%80%BC%20%3E%208.png)
我最近将我的网站从 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_ 调用相比,它的速度非常差。
多谢!