测试站后台保存一篇文章转圈 30 秒才成功,同一条内容在线上 2 秒就保存完,测试机只剩 60MB 可用内存,swap 一直在用。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,测试机是最低配实例,PHP 进程和数据库挤在一台机器上,内存不够时数据库缓冲池被压缩。线上是分离部署,配置差了一个量级。

「测试机资源不足」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。别只看报错的最后一行,往上看几行,真正的起因通常在上面。

free -m
wp db query "SHOW VARIABLES LIKE 'innodb_buffer_pool_size'"
tail -f /var/log/php-fpm/slow.log

同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。

具体做法是,先看内存和慢查询日志,确认瓶颈在内存还是磁盘;给 PHP 设内存上限和进程数上限,别让数据库被挤掉;数据库单独放一台,或者至少把缓冲池固定下来;资源实在紧张就关掉测试站不用的插件和计划任务。

最后用这个标准收尾,保存文章耗时回到 3 秒以内,可用内存稳定在 200MB 以上,swap 不再增长。

作者 9823189