代码性能瓶颈是CPU占用过高的常见根源。使用Xdebug或Blackfire等性能分析工具定位耗时函数(如循环嵌套、重复数据库查询、复杂正则匹配),针对性优化:
file_get_contents、远程API调用)。Opcode缓存可避免PHP重复编译脚本,显著降低CPU负载。推荐使用OPcache(PHP内置扩展):
sudo yum install php-opcache(CentOS默认仓库);/etc/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 # 文件修改检查频率(秒)
sudo systemctl restart php-fpm。PHP-FPM的进程池设置直接影响CPU利用率。根据服务器硬件(CPU核心数、内存)调整/etc/php-fpm.d/www.conf(或/etc/php-fpm.conf):
dynamic(动态调整,适合大多数场景);pm.max_children:最大子进程数,建议设置为CPU核心数×2+1(如4核CPU设为9);pm.start_servers:启动时的子进程数,建议为max_children的1/3~1/2;pm.min_spare_servers/pm.max_spare_servers:空闲进程的最小/最大数量,避免频繁创建/销毁进程;pm.max_requests=500,防止单个进程长期运行导致内存泄漏。pm = dynamic
pm.max_children = 10 # 根据服务器调整
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 8
pm.max_requests = 500
sudo systemctl restart php-fpm。开启PHP-FPM慢日志,记录执行时间超过阈值的请求,快速定位性能瓶颈:
/etc/php-fpm.d/www.conf,添加:slowlog = /var/log/php-fpm/slow.log
request_slowlog_timeout = 10s # 超过10秒的请求记录到慢日志
tail -f /var/log/php-fpm/slow.log查看慢请求,针对性优化代码或数据库查询。fastcgi_pass unix:/run/php-fpm/www.sock;(Unix Socket比TCP更快);worker_processes为CPU核心数,worker_cpu_affinity绑定CPU核心(如4核设为0001 0010 0100 1000),减少进程切换开销。mod_php,建议切换到PHP-FPM(mod_proxy_fcgi),提升并发处理能力。使用工具实时监控CPU和PHP-FPM状态:
sudo systemctl status php-fpm或php-fpm -t查看进程池状态;检查访问日志(如Nginx的access.log),查找异常请求(如高频访问同一接口、大量POST请求),使用防火墙(如iptables/firewalld)或Fail2Ban阻止恶意IP,减少无效请求对CPU的消耗。