一、调整PHP-FPM进程管理参数
进程管理是PHP-FPM性能优化的核心,需根据服务器资源(内存、CPU)和负载特性选择合适模式(static
/dynamic
/ondemand
):
pm
模式选择:static
模式固定进程数,适合负载稳定的场景(如高并发固定流量),配置简单且无进程创建/销毁开销;dynamic
模式根据负载动态调整(默认),适合波动较大的场景;ondemand
模式按需创建进程(空闲超时回收),适合低负载场景以节省资源。pm.max_children
:最大子进程数,需根据服务器内存和单个PHP进程内存占用(通过memory_limit
计算,如memory_limit=128M
时,1GB内存约可设置7-8个进程)确定,避免设置过高导致内存耗尽。pm.start_servers
:启动时的子进程数,建议设置为可用CPU核心数的4倍(如4核CPU设置为16),确保启动时有足够进程处理初始请求。pm.min_spare_servers
/pm.max_spare_servers
:空闲进程的最小/最大数量(如min=5
、max=35
),保持一定空闲进程以应对突发请求,避免频繁创建/销毁进程的开销。pm.max_requests
:每个子进程处理的最大请求数(如500-1000),防止内存泄漏(长期运行的进程可能累积内存垃圾),定期重启进程释放内存。二、启用并优化OPcache加速
OPcache是PHP代码缓存的关键扩展,可缓存编译后的字节码,避免重复解析和编译,显著提升执行速度:
php.ini
中添加zend_extension=opcache.so
(Linux)或zend_extension=php_opcache.dll
(Windows),并设置opcache.enable=1
。opcache.memory_consumption
:OPcache使用的内存大小(如128MB-256MB),根据服务器内存调整,建议为可用内存的10%-20%。opcache.max_accelerated_files
:可缓存的文件数量(如4000-10000),需大于项目中PHP文件的总数(可通过find /path/to/project -type f -name "*.php" | wc -l
统计)。opcache.revalidate_freq
:字节码重新验证的时间间隔(如60秒),设置为0表示每次请求都验证(开发环境适用),生产环境建议设置为60秒以上以减少磁盘I/O。opcache.validate_timestamps
:是否验证文件时间戳(生产环境设为0,避免频繁检查文件修改时间)。三、优化系统内核参数
调整Linux内核参数可提升PHP-FPM的网络和文件处理能力:
vm.swappiness
设置为10
(默认60),减少交换分区的使用(交换分区会降低I/O性能)。ulimit -n 65535
临时设置,或在/etc/security/limits.conf
中永久添加* soft nofile 65535
、* hard nofile 65535
。net.core.somaxconn
(监听队列长度,如65535)、net.ipv4.tcp_max_syn_backlog
(SYN队列长度,如65535)、net.ipv4.ip_local_port_range
(本地端口范围,如1024-65535),提升网络并发处理能力。四、使用持久化连接与连接池
减少数据库连接的开销是提升性能的重要环节:
PDO
或mysqli
的持久化连接(如new PDO("mysql:host=localhost;dbname=test", "user", "password", [PDO::ATTR_PERSISTENT => true])
),避免每次请求都建立新的数据库连接。PDO
或mysqli
扩展创建数据库连接池(如Swoole
的协程连接池),复用连接资源,减少连接建立和断开的开销(尤其适合高并发场景)。五、启用缓存机制减少I/O
缓存常用数据可显著减少数据库和文件系统的访问次数:
Redis
或Memcached
缓存数据库查询结果(如热点数据、频繁访问的配置信息),设置合理的过期时间(如10分钟),避免重复查询。Linux
的tmpfs
文件系统),提升文件读取速度。六、代码与数据库优化
Xdebug
、Blackfire
)定位代码瓶颈(如循环嵌套、重复计算),减少不必要的计算和内存使用(如避免在循环中创建大数组)。SELECT *
)、定期清理无用数据(如日志表)、调整数据库配置(如innodb_buffer_pool_size
设置为内存的50%-70%),提升数据库查询性能。七、监控与持续调优
定期监控PHP-FPM和系统性能,根据实际情况调整参数:
htop
(查看CPU、内存使用率)、vmstat
(查看系统负载、I/O情况)、iostat
(查看磁盘I/O)、php-fpm status
(查看PHP-FPM进程状态,如活跃进程数、空闲进程数)监控性能指标。slowlog = /var/log/php-fpm/slow.log
、request_slowlog_timeout = 5s
),分析执行时间超过阈值的脚本,针对性优化。八、其他优化措施
Nginx
或HAProxy
作为负载均衡器,将请求分发到多台PHP-FPM服务器,提升整体吞吐量。