我正在使用`ab'工具测试我的Apache和PHP设置(在Ubuntu上的默认配置) . 有2个并发连接,我得到了相当满意的结果:
ab -k -n 1000 -c 2 http://localserver/page.php
Requests per second: 184.81 [#/sec] (mean)
Time per request: 10.822 [ms] (mean)
Time per request: 5.411 [ms] (mean, across all concurrent requests)
鉴于它是一个低内存的虚拟机,没关系 . 现在我想测试一个更现实的场景:请求在同时连接的100个用户(读取:连接)之间传播:
ab -k -n 1000 -c 100 http://localserver/page.php
Requests per second: 60.22 [#/sec] (mean)
Time per request: 1660.678 [ms] (mean)
Time per request: 16.607 [ms] (mean, across all concurrent requests)
这更糟糕 . 虽然总体每秒请求数量没有显着下降(184到60#/秒),但从用户的角度来看,每个请求的时间却急剧上升(平均从10毫秒增加到超过1.6秒) . 最长的请求超过8秒,并且在测试期间使用Web浏览器手动连接到本地服务器花了将近10秒 .
What could be the cause and how can I optimize the concurrency performance to an acceptable level?
(我使用的是Ubuntu Linux Server附带的默认配置 . )
1 回答
首先,您需要查看每个脚本消耗的内存量,即 . memory_limit然后用它来划分VM内存 . 这应该是您可以同时处理的连接数,而不会耗尽内存,因此服务器开始进行抖动 .
您将获得非常少量的连接 . 所以你需要
增加记忆力
减少memory_limit
使每个连接完成得更快
下一步是查看任何数据库查询是否需要比预期更长的时间,我通常会在查询超过0.5秒时开始查看mysql-slow.log . 如果可以的话,还要删除不使用索引的查询 .
接下来安装一个监视工具,如collectd,看看是否有足够的CPU可用 .
从业务角度来看,这取决于这是一个新的网站/系统还是现有的东西 . 如果它是新的并且增长是戏剧性的,那么你需要在硬件上暂停一段时间,一个无法工作或在流量下崩溃的系统会迅速侵蚀企业的信任 . 最重要的是,如果托管账单每月低于1000美元,通常不值得优化 . 如果这是不可承受的,那么您可能需要回到您的商业模式 .