Ubuntu系统下Nginx+PHP-FPM站点首字节响应延迟15秒求助
解决Nginx+PHP-FPM站点首字节响应延迟15秒的思路
从配置和进程状态入手排查
调整PHP-FPM进程参数
从你的www.conf配置来看,pm.max_children设为5、pm.start_servers设为2,该数值在有并发请求时会导致请求排队等待空闲进程,直接拉长响应时间。建议根据服务器CPU核心数调整:- 2核CPU可尝试将
pm.max_children改为10-20,pm.start_servers改为4-6,pm.min_spare_servers和pm.max_spare_servers对应设为2和8。 - 修改后重启PHP-FPM:
sudo systemctl restart php-fpm(根据PHP版本可能是php7.4-fpm等)
- 2核CPU可尝试将
开启PHP-FPM慢日志定位脚本问题
首字节响应慢大概率是PHP脚本执行耗时过长,开启慢日志可精准定位:- 在www.conf中取消
slowlog和request_slowlog_timeout的注释,配置如下:slowlog = /var/log/php-fpm/www-slow.log request_slowlog_timeout = 2s - 重启PHP-FPM后,触发慢请求,查看日志即可找到耗时久的脚本或函数。
- 在www.conf中取消
排查系统资源瓶颈
从htop截图看CPU使用率不高,但需关注内存和磁盘IO:- 用
free -h检查内存,若内存不足,PHP-FPM进程可能被OOM Killer频繁终止,导致请求反复创建进程增加延迟。 - 用
iostat -x 1查看磁盘读写状态,若磁盘IO过高,会拖慢脚本读取文件、数据库操作的速度。
- 用
Nginx侧优化配置
- 开启
fastcgi_cache缓存动态内容,减轻PHP-FPM压力:
在站点location块中添加:fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=phpcache:10m max_size=10g inactive=60m use_temp_path=off;fastcgi_cache phpcache; fastcgi_cache_valid 200 60m; fastcgi_cache_methods GET HEAD; - 调整FastCGI超时参数,避免等待超时:
fastcgi_connect_timeout 30s; fastcgi_send_timeout 30s; fastcgi_read_timeout 30s;
- 开启
额外排查方向
- 检查站点数据库查询,用
EXPLAIN分析是否存在未加索引的慢查询。 - 测试服务器DNS解析速度,可临时切换为公共DNS(如8.8.8.8)验证是否是DNS延迟导致。
内容的提问来源于stack exchange,提问作者chhameed
相关产品推荐
相关产品推荐

