一、减少无用记录并调整日志级别应按照实际需要设定PHP日志级别,避免写入过多没有意义的日志,例如DEBUG、INFO级别的相关信息。例如,可在php.ini里面完成设置:

error_reporting = E_ERROR | E_WARNING | E_PARSE# 仅记录错误、警告和解析错误log_errors = On # 开启日志记录或在PHP-FPM配置文件(如/etc/php-fpm.d/www.conf)中设置:
php_admin_value[error_log] = /var/log/php-fpm/www-error.logphp_admin_flag[log_errors] = on这样既能降低日志写入频率,又可缩小日志文件体积,从而改善性能。
二、采用异步日志记录,防止主线程被阻塞PHP进程会受到同步日志记录的阻塞,进而拖慢脚本执行。建议采用Monolog等第三方日志库完成异步写入。例如:
use MonologLogger;use MonologHandlerStreamHandler;use MonologHandlerBufferHandler;// 创建日志通道$logger = new Logger('app');// 使用BufferHandler实现批量异步写入(缓冲100条或1秒后写入)$handler = new BufferHandler(new StreamHandler('/var/log/php/app.log', Logger::WARNING), 100, Logger::WARNING);$logger->pushHandler($handler);// 记录日志(不会立即写入磁盘)$logger->warning('This is a warning message');写入操作交由后台线程处理后,异步日志能够明显减轻对主线程的影响。
三、设置日志轮转,避免文件体积过大日志文件过大会提升磁盘I/O压力,并延长查找时间。可以使用logrotate工具自动执行旧日志的轮换、压缩和删除。例如,先创建/etc/logrotate.d/php-fpm相应文件:
/var/log/php-fpm/*.log {daily # 每天轮换missingok # 忽略缺失文件rotate 7# 保留最近7天的日志compress# 压缩旧日志(节省空间)notifempty# 空日志不轮换create 640 root adm # 新日志文件权限}按期执行logrotate即可自动管理日志文件(默认每天一次)。
四、改进日志存储方式,提高写入效率
$logData = [];for ($i = 0; $i < 100; $i++) {$logData[] = "Log entry {$i}";}file_put_contents('/var/log/php/batch.log', implode(PHP_EOL, $logData) . PHP_EOL, FILE_APPEND);五、关闭没有必要的日志记录
php.ini中将其注释:; opcache.error_log = /var/log/opcache_errors.logslow_query_log)。六、改进PHP与服务器配置
pm.max_children(子进程数量)、pm.start_servers(启动时的子进程数)等参数,防止进程数量过多引发资源竞争。例如:pm.max_children = 50# 根据服务器内存调整(每个子进程约消耗10-20MB内存)pm.start_servers = 10 # 启动时的子进程数opcache缓存编译后的PHP脚本,减少脚本加载和解析时间(php.ini中设置):opcache.enable=1opcache.memory_consumption=128opcache.interned_strings_buffer=8opcache.max_accelerated_files=4000/etc/security/limits.conf中加入:* soft nofile 4096* hard nofile 8192之后执行ulimit -n 4096让配置生效。