选择合适的PHP版本
使用最新的稳定版PHP(如PHP 8.x),新版本通常包含性能改进(如JIT编译器、OPcache优化)和安全修复,能显著提升php-fpm的执行效率。
调整PHP-FPM进程管理配置
进程池参数需根据服务器资源(CPU核心数、内存)和负载特性调整:
dynamic
(动态模式,适合负载波动大的场景),其次ondemand
(按需模式,适合低负载场景),避免static
(固定进程数,易浪费资源)。(可用内存 - 系统预留内存) / 单个PHP进程内存消耗
(如16GB内存、单个进程256MB,则设置为60左右),避免过多进程导致内存耗尽。启用并优化OPcache
OPcache通过缓存编译后的PHP字节码,减少重复解析和编译的开销,是提升php-fpm性能的关键:
php.ini
中启用:zend_extension=opcache.so
、opcache.enable=1
、opcache.enable_cli=1
(命令行也启用)。opcache.memory_consumption
(如128-256MB,根据服务器内存调整),opcache.interned_strings_buffer
(如8-16MB,优化字符串存储)。opcache.max_accelerated_files
(如4000-8000,覆盖项目中所有PHP文件),opcache.revalidate_freq
(如60-300秒,平衡缓存更新频率与性能)。优化进程资源限制
使用Unix Socket替代TCP Socket
若web服务器(如Nginx)与php-fpm在同一台服务器上,将fastcgi_pass
从127.0.0.1:9000
改为Unix Socket(如unix:/run/php/php8.2-fpm.sock
),减少网络协议栈的开销,提升通信效率。
启用APCu缓存
对于频繁访问的变量或数据(如数据库查询结果、配置信息),使用APCu缓存(extension=apcu.so
),减少重复计算和数据库访问。调整参数:apc.shm_size
(如64-128MB,根据缓存数据量调整),apc.ttl
(如3600秒,缓存项生存时间)。
优化PHP代码
监控与调优
htop
(查看CPU/内存使用率)、vmstat
(查看I/O和进程状态)、php-fpm status
(查看进程池状态,如活跃进程数、空闲进程数)。slowlog
(slowlog = /var/log/php-fpm/www-slow.log
)和request_slowlog_timeout
(如10s),定位慢请求(如执行时间长的脚本),针对性优化。系统级优化
/etc/security/limits.conf
,增加* soft nofile 65535
和* hard nofile 65535
,允许进程打开更多文件。vm.nr_hugepages=1024
),减少内存页管理开销。