1. 排查资源占用根源
首先通过工具定位高占用原因,使用top、htop查看进程CPU/内存占用排序,ps -ylC php-fpm --sort:rss按内存使用排序进程,ps aux | grep php-fpm | wc -l统计当前PHP-FPM进程总数,tail -f /var/log/php-fpm.log分析日志中的错误或警告(如内存泄漏、慢查询)。这些步骤能快速识别是进程过多、内存泄漏还是代码问题导致的资源占用过高。
2. 调整PHP-FPM进程池配置
根据服务器资源(内存、CPU核心数)优化进程池参数,避免进程过多或过少:
/etc/php-fpm.d/www.conf或/etc/php/版本/fpm/pool.d/www.conf),调整后重启PHP-FPM服务(sudo systemctl restart php-fpm)。3. 优化PHP代码与缓存
php.ini文件,添加或修改以下参数:[opcache] zend_extension=opcache.so opcache.enable=1 opcache.memory_consumption=128 # 缓存内存大小(MB,根据内存调整) opcache.interned_strings_buffer=8 opcache.max_accelerated_files=4000 # 缓存文件数量 opcache.revalidate_freq=60 # 文件修改后重新验证间隔(秒) unset());优化数据库查询(添加索引、使用预处理语句、减少SELECT *);避免内存泄漏(如未关闭的文件句柄、数据库连接)。4. 使用缓存技术减少资源消耗
引入缓存层减少对数据库、磁盘的频繁访问:
$redis = new Redis(); $redis->connect('127.0.0.1', 6379); $data = $redis->get('cache_key'); if (!$data) { $data = getDataFromDatabase(); // 从数据库获取数据 $redis->set('cache_key', $data, 60); // 缓存60秒 } echo $data; 5. 调整Web服务器配置
若使用Nginx作为前端服务器,优化其与PHP-FPM的交互:
fastcgi_pass unix:/run/php-fpm/www.sock;)而非TCP/IP(如127.0.0.1:9000),减少网络开销。location ~ \.php$ { fastcgi_pass unix:/run/php-fpm/www.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; fastcgi_buffers 8 16k; # 缓冲区数量和大小 fastcgi_buffer_size 32k; # 缓冲区大小 } limit_req_zone)限制单个IP的请求速率,防止恶意请求或突发流量导致PHP-FPM过载。6. 系统级优化
/etc/security/limits.conf,添加:* soft nofile 65535 * hard nofile 65535 并修改/etc/systemd/system/php-fpm.service.d/override.conf(若使用systemd),添加:[Service] LimitNOFILE=65535 重启systemd和PHP-FPM使配置生效。7. 监控与持续调优
建立监控机制,定期检查资源使用情况:
top、htop、vmstat、iostat查看CPU、内存、磁盘I/O的使用情况。pm.max_children),持续优化配置。