如何提升Ubuntu上PHP-FPM效率
进程池参数是PHP-FPM性能的核心,需根据服务器资源和应用负载调整。打开/etc/php/{version}/fpm/pool.d/www.conf({version}为PHP版本,如8.1),重点设置:
dynamic(动态模式,适合负载波动场景),若负载稳定可选static(固定进程数,减少进程创建开销)。pm.max_children:最大子进程数,需根据服务器内存计算(如可用内存/单个进程内存消耗,单个进程内存可通过ps aux | grep php-fpm估算),避免内存溢出。pm.start_servers:启动时的子进程数,建议设为pm.max_children的1/4~1/2(如max_children=50则设为12~25)。pm.min_spare_servers/pm.max_spare_servers:空闲进程的最小/最大数量,保持合理范围(如min=5、max=35),避免频繁创建/销毁进程。pm.max_requests:每个子进程处理的最大请求数(如500),防止内存泄漏(长期运行的进程可能累积内存垃圾)。request_terminate_timeout设为合理值(如30s),避免长时间运行的脚本占用资源;slowlog启用慢日志(/var/log/php-fpm/www-slow.log),request_slowlog_timeout设为10s,快速定位性能瓶颈。OPcache可缓存PHP脚本的字节码,避免重复编译,显著提升执行效率。操作步骤:
sudo apt install php-opcache(Ubuntu默认包含在PHP包中)。/etc/php/{version}/fpm/php.ini,取消以下注释并调整参数:zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128 # 缓存内存大小(MB,根据应用复杂度调整,如128~256)
opcache.max_accelerated_files=4000 # 缓存的文件数量(需大于应用中的PHP文件总数)
opcache.revalidate_freq=60 # 文件修改后重新验证的时间间隔(秒,生产环境可设为0)
opcache.fast_shutdown=1 # 快速关闭,释放内存
phpinfo.php页面,检查opcache是否显示“enabled”。根据应用场景选择进程管理模式:
fastcgi_pass设为Unix Socket路径(如unix:/run/php/php8.1-fpm.sock;)。fastcgi_pass指向127.0.0.1:9000,并调整系统内核参数(如net.core.somaxconn=65535)提升连接数上限。优化系统参数以提升PHP-FPM的I/O和网络性能:
/etc/security/limits.conf,添加* soft nofile 65535、* hard nofile 65535;编辑/etc/systemd/system.conf,设置DefaultLimitNOFILE=65535,然后执行systemctl daemon-reload。/etc/sysctl.conf,添加:net.core.somaxconn=65535
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_max_syn_backlog=65535
执行sysctl -p使配置生效。htop(查看CPU/内存使用)、vmstat 1(查看系统负载)、iostat -x 1(查看磁盘I/O)监控服务器状态。www.conf中启用pm.status_path = /status,通过Nginx配置访问/status页面(需授权),查看进程数、请求处理时间等指标。error.log(/var/log/php-fpm/error.log)和慢日志,定位错误和慢查询。mysqli_connect的p:前缀)或连接池(如Swoole),减少数据库连接开销;为常用查询字段添加索引,避免SELECT *。ob_start('ob_gzhandler')),减少文件I/O操作。