apache 因 CPU 和内存使用率低而超时

apache 因 CPU 和内存使用率低而超时

几天以来,我意识到如果当前请求数约为 90 个,我的 apache2 就会运行得非常慢。

如果我进行 loader.io 测试它会超时,例如在 13 次成功请求之后:

loader.io 结果 http://d.pr/i/S6D1+

我真正想知道的是,我的 CPU 使用率是否正常(加载器测试时的屏幕截图):

htop 显示 http://d.pr/i/kNZ4+

我的内存也有足够的可用空间。

free -m 输出:

               total       used       free     shared    buffers     cached
  Mem:         24158       6494      17663          0        259       2492
  -/+ buffers/cache:       3742      20416
  Swap:        24574          0      24574

我当前的apache2设置:

Timeout 20
KeepAlive On
MaxKeepAliveRequests 75
KeepAliveTimeout 2

<IfModule mpm_prefork_module>
    StartServers          10
    MinSpareServers       10
    MaxSpareServers       30
    ServerLimit           200
    MaxClients            200
    MaxRequestsPerChild   4000
</IfModule>

编辑:

根据要求提供更多规格:

 OS: Debian 6.0.7 (2.6.32-5-amd64)
 mySQL-Server: 5.5.30-1~dotdeb.0-log (Debian) 
 PHP: 5.3.22-1~dotdeb.0 with Suhosin-Patch (cli)

APC设置:

; configuration for php apc module
extension=apc.so
apc.enabled=1
apc.shm_size=512M

mySQL Tuning Primer 也说一切正常。

我正在测试的网站是一个 TYPO3 网站,其起始页上有一些 AJAX。

刚刚在同一台服务器上的简单 Wordpress 上测试了该网站(完全没有问题)

 Success responses: 3097
 Avg response time: 1503
 Sent from app: 20.86 MB
 Rcvd from loader:  369.10 KB

TYPO3 测试提前失败

知道为什么会发生这种情况吗?甚至 apache2ctl status 也变得非常慢!但系统上的其他东西都运行正常。

不知道为什么这段时间之后会发生这种情况。

答案1

如果 CPU 和内存正常,您可以尝试将 ServerLimit 和 MaxClients 的值更改为较大的数字,然后再次进行测试。在 htop 捕获中,我可以看到“446 个任务”,因此似乎 httpd 进程的数量已达到这些限制。

但这只是一种解决方法,在测试中发送更多请求后,超时会再次出现。您需要查找的是为什么 httpd 请求需要大约 6 秒,也许是代码中存在一些问题。

正如您在一个简单的 wordpress 网站上所说的那样,测试运行良好,因此您需要检查您正在测试的应用程序(¿php?,¿python?)。在数据库中,检查进行测试时是否存在慢查询(mytop 或 mtop 是很好的工具)。

相关内容