在 CentOS 上 PHP 日志写入变慢,通常不是“日志本身慢”,而是日志写入路径、系统配置或资源瓶颈导致的。下面按常见原因 → 排查方法 → 解决办法给你系统梳理一下。
比如:
/var/log/php 在 NFS / NAS✅ 表现:
✅ 排查:
df -h
mount | grep php
✅ 解决:
CentOS 上:
/var/log 在系统盘✅ 排查:
iostat -x 1
iotop
✅ 解决:
php-fpm 慢日志 vs 错误日志混淆很多人说的“PHP 日志慢”,其实是:
slowlog(PHP 慢请求日志)error_log(错误日志)✅ 检查:
php-fpm.conf
slowlog = /var/log/php-fpm/slow.log
request_slowlog_timeout = 5s
➡ 这是 PHP 执行慢,不是日志慢
CentOS 默认开启 SELinux
✅ 排查:
getenforce
tail -f /var/log/audit/audit.log
✅ 临时验证:
setenforce 0
✅ 解决:
semanage fcontext -a -t httpd_log_t "/path/to/php/logs(/.*)?"
restorecon -Rv /path/to/php/logs
比如:
php_errors.log 几个 G✅ 影响:
✅ 解决:
logrotate
示例:
/var/log/php/*.log {
daily
rotate 7
compress
missingok
notifempty
}
error_log 输出到 stderr(systemd 慢)如果你的 PHP 是:
error_log = /proc/self/fd/2
而 systemd journal 很忙 → 会拖慢
✅ 解决:
如果你在代码里:
file_put_contents('/var/log/xxx.log', $log, FILE_APPEND);
高并发下:
✅ 解决:
syslog# 1. 看 PHP 日志配置
php --ini
php -i | grep error_log
# 2. 看磁盘
iostat -x 1
# 3. 看日志文件大小
ls -lh /var/log/php*
# 4. 看 SELinux
getenforce
# 5. 看是否网络盘
mount
你可以直接贴:
php.ini 中 error_log / slowlog 配置我可以直接告诉你 到底是哪一条在拖慢你。