众所周知,WordPress,简直电老虎来的。
从笔者实际运营经验来看,查看服务器状态,就会经常看到php-fpm: pool (站点域名)
这一进程,对鄙服务器CPU资源的占用,其最低线稳定于⅔,动辄则99%,甚至于满格。
为此可能需要调整pm.max_children
、pm.start_servers
、pm.min_spare_servers
和pm.max_spare_servers
这些参数。
参数配置之位置
PHP-FPM站点池的配置文件通常位于/etc/php/(版本号)/fpm/pool.d/www.conf
。当然,有时根据实际情况,修改的对象会是/etc/php/(版本号)/fpm/pool.d/(具体域名).conf
。
在一些环境下,上述文件可能不支持直接修改,或者修改后也不会永久性保存。这时则根据实际情况来找寻配置位置,例如网站根目录下的.user.ini
(记得配置好正确的文件权限)。
参数之修改
在许多PHP-FPM默认配置文件里,pm
模式会被设置为ondemand
,而pm.max_children
的值被设置为4。在ondemand
模式下,PHP-FPM只会在请求到达时启动新的子进程,并在子进程空闲一段时间后关闭它们。这种模式对于低流量的网站是非常有效的,但对于高流量的网站可能会导致额外的CPU消耗,因为需要频繁地创建和销毁子进程。以下是一些可能的优化建议:
-
修改进程管理模式:
- 考虑将
pm
模式从ondemand
更改为dynamic
。在dynamic
模式下,PHP-FPM将保持一定数量的空闲进程,以便能够更快地响应新的请求。pm = dynamic
- 考虑将
-
增加最大子进程数:
pm.max_children
的值决定了同时能处理多少请求。如果服务器资源允许,你可能想要增加这个值以处理更多的并发请求。pm.max_children = 16 ; 或更高的值,视服务器资源而定
-
设置服务器进程数:
- 在
dynamic
模式下,你还可以设置pm.start_servers
,pm.min_spare_servers
和pm.max_spare_servers
参数来控制空闲进程的数量。例如:pm.start_servers = 2 pm.min_spare_servers = 2 pm.max_spare_servers = 4
- 在
-
优化最大请求数:
pm.max_requests
参数决定了每个子进程在重新生成之前可以处理多少请求。这可以防止可能的内存泄漏。你可以根据贵站的具体情况调整这个值。pm.max_requests = 5000 ; 或其他适合你的网站的值,4000可能够用了
-
调整空闲进程超时:
pm.process_idle_timeout
参数决定了一个子进程在被关闭之前可以保持空闲多长时间。你可以根据需要调整这个值。pm.process_idle_timeout = 20s ; 或其他适合你的网站的值
以上建议可以帮助你优化PHP-FPM的配置,以更好地处理高流量并减少CPU的消耗。每次修改配置后,确保重启PHP-FPM服务以使更改生效。同时,建议在一个测试环境中尝试这些更改,以确保它们不会影响贵站的正常运行。
PHP的其他调优方向
-
PHP版本:
- 确保正在使用的是最新的PHP版本。新版本的PHP通常会提供更好的性能和错误修复。
-
慢日志:
- 启用PHP和MySQL的慢日志功能,以便识别和优化执行缓慢的代码和查询。
PHP之外的其他因素
WordPress网站报错和服务器资源过度使用,也可能是由多种因素造成。
本文仅聚焦于PHP配置,只不过若果按照本文方式修改,仍有问题,也可以考虑下如下方向:
-
插件问题:
- 有些插件可能会消耗大量的资源。尝试禁用所有插件,然后逐个重新启用,以确定是哪个插件造成的问题。
-
主题问题:
- 有些主题可能编写不佳或包含不必要的功能,从而消耗大量资源。尝试切换到一个简单的主题,如WordPress的默认主题,看看问题是否得到解决。
-
代码优化:
- 确保你的WordPress网站代码优化良好。这包括简化代码,删除不必要的代码,以及确保代码没有错误。
-
数据库优化:
- 数据库查询可能会消耗大量资源。使用数据库优化插件,或手动清理和优化数据库。
-
缓存:
- 安装和配置缓存插件,以减少服务器的负载。例如,你可以使用W3 Total Cache或WP Super Cache插件。
-
CDN服务:
- 使用内容分发网络(CDN)来减轻服务器的负担,并加速网站加载速度。
-
服务器配置:
- 检查服务器配置,特别是PHP和MySQL的配置。可能需要调整某些设置以改善性能。例如,可能需要增加PHP内存限制或优化PHP-FPM配置。
-
服务器资源:
- 考虑升级到一个更强大的服务器,或者增加更多的CPU和内存资源。
-
定期监控:
- 使用服务器监控工具来跟踪资源使用情况,以便在问题发生时快速识别和解决。