1. 使用进程守护工具确保进程存活
通过systemd或Supervisor监控PHP-FPM进程,配置自动重启策略,避免进程意外退出导致服务中断。
/etc/systemd/system/php-fpm.service(或对应版本的服务文件),添加[Service]部分:ExecStart=/usr/sbin/php-fpm --nodaemonize --fpm-config /etc/php-fpm.conf(路径根据实际安装位置调整),设置Restart=always;启动服务并设置开机自启:sudo systemctl start php-fpm && sudo systemctl enable php-fpm。sudo apt install supervisor),创建/etc/supervisor/conf.d/php-fpm.conf,内容如下:[program:php-fpm] command=/usr/sbin/php-fpm --nodaemonize --fpm-config /etc/php-fpm.conf autostart=true autorestart=true startretries=3 user=www-data redirect_stderr=true;启动Supervisor并加载配置:sudo systemctl start supervisor && sudo supervisorctl update。2. 优化PHP-FPM进程池配置
根据服务器硬件资源(CPU核心数、内存容量)调整进程池参数,避免资源耗尽或进程闲置。
www.conf为例,路径通常为/etc/php/版本号/fpm/pool.d/www.conf):
pm:选择dynamic(动态模式,推荐)或ondemand(按需模式,适合低流量场景);pm.max_children:最大子进程数,计算公式为服务器内存(MB)÷ 单个PHP进程内存占用(MB)(如1GB内存、单个进程占用100MB,则设置为10);pm.start_servers:启动时的子进程数,建议设置为可用CPU核心数×4(如4核CPU设置为16);pm.min_spare_servers/pm.max_spare_servers:最小/最大空闲进程数,建议设置为可用CPU核心数×2和可用CPU核心数×4(如4核CPU设置为8和16);pm.max_requests:每个子进程处理的最大请求数(如500或1000),防止内存泄漏。3. 调整PHP配置限制资源使用
修改php.ini文件,限制单个PHP进程的资源消耗,避免单个请求拖垮整个服务。
memory_limit:单个PHP脚本的最大内存占用(如256M,根据应用需求调整);max_execution_time:脚本最大执行时间(如300秒,避免慢请求占用资源);max_input_time:输入数据(如POST、GET)的最大处理时间(如300秒);display_errors:生产环境务必设置为Off(避免泄露敏感信息),log_errors设置为On(开启错误日志)。4. 启用并配置OPcache提升性能
OPcache缓存已编译的PHP字节码,减少重复解析和编译的开销,显著提升PHP执行速度。
sudo apt install php-opcache);php.ini,添加以下配置:[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128 # 缓存大小(MB,根据内存调整)
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000 # 缓存的文件数量
opcache.revalidate_freq=60 # 文件修改后重新编译的时间间隔(秒)
phpinfo.php页面,检查opcache是否显示为“enabled”。5. 监控与日志分析
定期监控PHP-FPM的运行状态和性能指标,及时发现并解决问题。
www.conf中启用状态页面(pm.status_path = /phpfpm_status),配置Web服务器(如Nginx)允许访问:location /phpfpm_status {
fastcgi_pass unix:/run/php/php-fpm.sock; # 根据实际路径调整
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
通过curl http://localhost/phpfpm_status查看进程状态(需授权访问)。/var/log/php-fpm.log或/var/log/php-fpm/error.log):sudo tail -f /var/log/php-fpm.log;journalctl查看systemd日志:sudo journalctl -u php-fpm -f(实时日志);6. 定期更新与维护
保持系统和PHP-FPM及相关组件的最新版本,修复已知安全漏洞和性能问题。
sudo apt update && sudo apt upgrade(Ubuntu/CentOS:sudo yum update);sudo apt install php-fpm会自动升级到最新稳定版);sudo service php-fpm restart或通过opcache_reset()函数);/etc/php-fpm.conf、/etc/php/版本号/fpm/pool.d/www.conf)和日志文件。7. 安全加固
限制PHP-FPM的访问范围和功能,防止恶意攻击。
www.conf中设置security.limit_extensions = .php(仅允许执行.php文件);open_basedir参数限制PHP脚本的访问范围(如open_basedir = /var/www/html/:/tmp/,防止访问敏感目录);chmod 660 /run/php/php-fpm.sock,属主为www-data);若通过TCP通信,使用防火墙限制访问IP(如sudo ufw allow from 192.168.1.0/24 to any port 9000)。