如何调整 Nginx + MySQL + PHP-FPM 瓶颈以解决服务器高负载?

如何调整 Nginx + MySQL + PHP-FPM 瓶颈以解决服务器高负载?

我的服务器 Ubuntu 14.04.4 LTS 正在高负载运行,当前使用 Nginx + Wordpress + W3 Total Cache + Memcached 运行单个站点。

我不确定mysql这是否导致了工作量问题。

htop以下是mytop

由此我可以看出htop内存不是这里的瓶颈。

它表明mysqldphp-fpm是使用资源最多的进程。

有人能告诉我如何解释mytop并且它看起来正常吗?

1  [|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||93.6%]     Tasks: 361, 71 thr; 12 running
2  [|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||95.6%]     Load average: 19.52 22.34 19.45 
3  [|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||97.5%]     Uptime: 71 days, 08:54:08
4  [|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||96.8%]
Mem[|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||5570/8015MB]
Swp[                                                                         0/0MB]

MySQL on localhost (5.7.13)
load 23.92 23.12 19.55 43/528 10012 up 7+04:05:52 [05:30:09]
Queries: 103.6M   qps:  175 Slow:  0.0  Se/In/Up/De(%):  79/00/00/00 
Sorts:  8693 qps now:  356 Slow qps: 0.0  Threads:  37 (   1/   3) 79/00/00/00 
Key Efficiency: 50.0%  Bps in/out: 28.8k/532.7k   Now in/out: 57.6k/880.7k

或者我应该考虑使用 fastcgi_cache 来避免影响 php-fpm?

更新:

我已尝试重新启动所有服务,Nginx、PHP-FPM 和 MySQL。

我正在工作一个流量相当高的网站,每天的页面浏览量有 110 万次。

重新启动所有服务后,资源又很快恢复正常。

在非高峰时段,我的 4 核机器上的负载值最大约为 4.00。

在高峰时段,负载达到20甚至40。

答案1

mytop 的输出并没有告诉我们你的 CPU 被哪些程序占用了 - 或者至少我不明白。我只使用 top / htop。

我写了一个关于 Nginx、Wordpress 和缓存的六部分教程。其中的想法应该可以帮助您优化服务器。

简而言之,你应该不惜一切代价避免使用 PHP。静态或半静态公共内容的缓存时间可以从 1 秒(微缓存)到 1 周,从而大大减少服务器负载。这可以将吞吐量提高两个数量级,并大大缩短响应时间。我还使用 CDN,云Flare免费层,用于静态资源缓存和加速 DNS 查找。

相关内容