几天以来,我意识到如果当前请求数约为 90 个,我的 apache2 就会运行得非常慢。
如果我进行 loader.io 测试它会超时,例如在 13 次成功请求之后:
loader.io 结果 http://d.pr/i/S6D1+
我真正想知道的是,我的 CPU 使用率是否正常(加载器测试时的屏幕截图):
我的内存也有足够的可用空间。
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 是很好的工具)。