一、调整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服务器,提升整体吞吐量。