我们有一个 VPS(2GB RAM/2 vCPU)。它使用 PHP 5.6、Centos 6、Apache 2.2 为 phpBB 论坛提供服务。但是有时论坛响应速度非常慢。使用 Chrome 网络浏览器时,我发现 TTFB 有时会长达 30 秒。奇怪的是,缓存项目也存在此问题。(见屏幕截图)
我已经尝试过了:
- 发行期间服务器负载不超过.20,并且有可用内存。
我 ping 了服务器:大约 10ms
安装 zend opcache(命中率 99.9%)
- 安装 memcached(统计数据)
我安装了 mytop 来查看问题是否出在 MySQL 上,但据我所知,MySQL 并没有做太多事情
查询:6.0M qps:26 慢:4.0 Se/In/Up/De(%):75/02/08/01 qps 现在:2 慢 qps:0.0 线程:1 ( 1/ 0) 00/00/00/00 密钥效率:99.4% Bps 输入/输出:4.4k/51.1k 现在输入/输出:48.4/ 7.5k
由于情况并非总是如此,因此复制此问题的唯一方法是频繁按 F5,尽管我不确定这是否真的能复制问题。我可以在较小程度上(2s ttfb)使用在 html 中复制的相同页面(删除动态部分)复制此问题。
http://s21.postimg.org/ql6eywn3b/ttfb.png
我已将 keepalive 设置为 (最大 100,15 秒),最大客户端数为 30。我下一步该怎么做?
答案1
我接下来要去哪里?
分析。有各种 PHP 分析工具。我喜欢 blackfire.io - 它可以轻松、清晰地找出任何瓶颈,无论是 PHP 代码、MySQL 查询还是两者的组合。如果没有分析,您就只能在黑暗中随机尝试。
除了 F5ing,您还可以使用 ab、yandex tank、Siege 等工具进行一些负载测试。
验证此问题是否真实存在的另一件事是在pagetest.org上进行测试并重复测试多次(高级设置,运行次数)。或者通过他们的API。
答案2
该问题是一个综合问题:
- SSD RAID5 在 dd 上提供的速度为 12.5mb/s,远低于人们的预期(目前:300-600 mb/s)
- 防火墙也有点太严格了,因为连接数被限制在每分钟 100 个,最高可达每分钟 200 个。(iptables)
VPS 被转移到了 IO 更好的 VPS,防火墙设置不再那么严格,问题就解决了。我还禁用了 memcached,因为 MySQL 显然不是瓶颈)