怎样优化CentOS的PHP-FPM性能
PHP-FPM的进程管理模式直接影响资源利用率和响应速度。推荐使用dynamic模式(动态调整进程数),并根据服务器资源设置关键参数:
pm.max_children:最大子进程数,建议为CPU核心数×4(如4核CPU设置为16),避免过多进程导致内存耗尽;pm.start_servers:启动时的子进程数,通常设为pm.max_children/4(如16核CPU设为4);pm.min_spare_servers/pm.max_spare_servers:空闲进程的最小/最大数量,建议设为CPU核心数的1-2倍(如4核CPU设为4-8),保持足够的空闲进程应对突发请求;pm.max_requests:每个子进程处理的最大请求数(如500-1000),防止内存泄漏(长期运行的进程可能积累内存垃圾)。OPcache是提升PHP性能的关键扩展,通过缓存预编译的字节码,避免每次请求都重新解析脚本。
sudo yum install php-opcache;/etc/php.ini,添加或修改以下参数:[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128 # 缓存内存大小(MB),根据服务器内存调整(如1GB内存可设为128-256)
opcache.interned_strings_buffer=8 # 内部字符串缓存大小(MB)
opcache.max_accelerated_files=10000 # 缓存的脚本文件数量(根据项目文件数调整)
opcache.revalidate_freq=60 # 脚本更新检查频率(秒),生产环境可设为0(禁用检查,需手动清除缓存)
opcache.fast_shutdown=1 # 快速关闭,减少内存释放时间
sudo systemctl restart php-fpm。调整PHP基础参数,减少资源浪费:
memory_limit:脚本最大内存限制(如128-256M),根据应用需求调整(避免设置过高导致内存溢出);max_execution_time:脚本最大执行时间(如30-300秒),根据业务需求调整(如上传大文件时可适当增加);file_uploads:开启文件上传(On),并根据需求调整upload_max_filesize(如10M)和post_max_size(如20M);disable_functions:禁用危险函数(如exec, system, shell_exec),仅在生产环境中使用(避免恶意代码执行)。优化Linux内核参数,提高PHP-FPM的I/O和网络性能:
/etc/sysctl.conf,添加或修改以下参数:fs.file-max = 100000 # 系统最大文件描述符数量
net.core.somaxconn = 65535 # 服务器套接字最大连接数
net.ipv4.tcp_max_syn_backlog = 65535 # SYN队列长度
net.ipv4.tcp_tw_reuse = 1 # 复用TIME-WAIT连接
net.ipv4.tcp_fin_timeout = 30 # TIME-WAIT连接超时时间(秒)
vm.swappiness = 10 # 减少交换分区使用(0-100,值越小越优先使用物理内存)
sudo sysctl -p;/etc/security/limits.conf,添加:* soft nofile 65535
* hard nofile 65535
使用户进程可打开的文件描述符数量达到上限。/etc/nginx/conf.d/default.conf),添加fastcgi_keep_conn on;,保持与PHP-FPM的长连接,减少TCP握手开销;PDO::ATTR_PERSISTENT => true),避免每次请求都重新建立数据库连接。使用工具定期监控PHP-FPM的运行状态,定位性能瓶颈:
sudo systemctl status php-fpm(查看服务状态)、top/htop(查看CPU/内存使用率);/etc/php-fpm.d/www.conf中设置request_slowlog_timeout = 5(记录执行时间超过5秒的请求),日志路径为slowlog = /var/log/php-fpm/www-slow.log,通过分析慢日志找出耗时操作(如慢查询、复杂脚本);SELECT *)、使用缓存(如Redis、Memcached缓存频繁访问的数据,减少数据库压力)、定期清理无用数据(如过期日志、临时表)。