CentOS PHP日志中常见的性能问题有哪些
小樊
41
2025-12-19 15:20:48
CentOS PHP日志中常见的性能问题
一 日志类型与定位路径
PHP-FPM 错误日志 :常见路径为**/var/log/php-fpm/error.log**,用于发现进程异常、超时、资源耗尽等引发的性能退化。
PHP-FPM 慢执行日志 :需在 pool 配置中开启,例如设置request_slowlog_timeout = 1 与slowlog = /usr/local/php-fpm/var/log/www-slow.log ,可精准定位执行时间过长的脚本与调用栈。
Web 服务器访问/错误日志 :如**/var/log/nginx/access.log**、/var/log/nginx/error.log 或**/var/log/apache2/access.log**、/var/log/apache2/error.log ,用于关联高耗时 URL、5xx 错误与后端响应异常。
数据库慢查询日志 :以 MySQL 为例,开启slow_query_log = 1 、slow_query_log_file = /var/log/mysql/slow-query.log 、long_query_time = 1 ,配合EXPLAIN 与mysqldumpslow 定位拖慢 PHP 的 SQL。
二 典型性能问题与日志表现
脚本级慢执行 :PHP-FPM 慢日志出现script_filename 与line ,伴随request_slowlog_timeout 阈值(如1s )被触发,常见于sleep/循环/外部 API 阻塞 等。
进程资源不足或排队 :错误日志出现WARNING: [pool www] server reached max_children setting ,或访问日志/网关出现502/504 ,多由并发请求超过 pm.max_children 、进程阻塞或后端慢导致。
数据库瓶颈 :数据库慢查询日志中Query_time 显著偏高、Rows_examined 远大于Rows_sent ,常见于缺失索引、全表扫描、N+1 查询 等。
缓存失效与反复编译 :未启用或未命中OPcache ,导致每次请求重复编译 ,在错误/慢日志中可见repeated compilation 或总体响应时间偏高而无业务异常。
外部依赖超时 :错误日志出现cURL timeout/Connection timed out ,或file_get_contents 等阻塞,表现为PHP 层等待 I/O 时间拉长。
配置不当 :如max_execution_time 、request_terminate_timeout 设置不合理引发频繁中断或重试 ;或未分离站点/业务池 ,单池抖动影响全部站点。
三 快速排查命令与阈值示例
实时观察慢脚本:tail -f /usr/local/php-fpm/var/log/www-slow.log (按request_slowlog_timeout 阈值记录)。
统计访问 Top URL:awk ‘{print $7}’ /var/log/nginx/access.log | cut -d’/’ -f1 | sort | uniq -c | sort -nr。
汇总数据库慢查询:mysqldumpslow -s at -t 10 /var/log/mysql/slow-query.log (按平均耗时取前 10)。
检查进程与队列:ps -ef | grep php-fpm;结合pm.max_children 与当前进程数判断是否排队/拒绝 。
配置基线核查:php -i | grep opcache.enable ;在php.ini 确认opcache 已启用且合理设置。
四 优化要点
启用并调优 OPcache :在php.ini 开启opcache ,减少编译开销,显著提升吞吐。
拆分 PHP-FPM 池并隔离 :按站点/业务拆分pool ,避免单池抖动扩散,便于限流与调参。
优化进程模型与限流 :依据CPU/内存 与并发 合理设置pm.max_children / pm.start_servers / pm.min_spare_servers / pm.max_spare_servers ,必要时使用request_terminate_timeout 作为兜底。
治理慢 SQL :为高频查询建立复合索引 ,避免SELECT *** 与 函数作用于索引列**;用EXPLAIN 验证执行计划;对N+1 改为预加载/JOIN ;结合Redis/Memcached 减少数据库压力。
引入 APM/Profiler :使用Xdebug/Blackfire 、New Relic 等定位热点函数、外部调用与数据库耗时,形成持续优化闭环。