在Ubuntu上优化PHP-FPM性能可以通过以下几个步骤来实现:
安装和配置PHP-FPM
- 安装PHP-FPM:
sudo apt update
sudo apt install php-fpm
- 配置PHP-FPM池:
- 复制默认配置文件:
sudo cp /etc/php/{version}/fpm/pool.d/www.conf /etc/php/{version}/fpm/pool.d/myapp.conf
- 编辑配置文件:
sudo nano /etc/php/{version}/fpm/pool.d/myapp.conf
- 关键配置参数:
listen:指定监听的地址和端口(例如,/run/php/php7.4-fpm.sock或127.0.0.1:9000)。listen.owner和listen.group:监听套接字的拥有者和组。user和group:运行PHP-FPM进程的用户和组。pm:进程管理器类型(dynamic、static或ondemand)。pm.max_children:最大子进程数。pm.start_servers:启动时的服务器进程数。pm.min_spare_servers:最小空闲服务器进程数。pm.max_spare_servers:最大空闲服务器进程数。
- 示例配置:
[myapp]
listen = /run/php/php7.4-fpm.myapp.sock
listen.owner = www-data
listen.group = www-data
user = www-data
group = www-data
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 1000
- 重启PHP-FPM:
sudo systemctl restart php{version}-fpm
优化PHP-FPM参数配置
-
关键参数:
pm.dynamic:使用动态模式,根据流量调整子进程数量。pm.max_children:根据服务器内存和CPU资源合理设置。pm.start_servers:根据预期负载设置初始子进程数。pm.min_spare_servers和pm.max_spare_servers:根据服务器流量模式调整。pm.max_requests:防止内存泄漏,设置合理的请求数。
-
优化建议:
- 对于高并发服务器,建议使用
dynamic模式。 - 根据服务器的内存和CPU资源合理设置
pm.max_children。 - 根据预期的负载设置合理的
pm.start_servers。 - 根据服务器的流量模式调整
pm.min_spare_servers和pm.max_spare_servers。 - 设置
pm.max_requests以防止内存泄漏。
- 对于高并发服务器,建议使用
启用PHP的OPcache扩展
- 启用OPcache:
- 编辑
php.ini文件:
sudo nano /etc/php/7.4/cli/php.ini
- 移除以下行的注释:
zend_extension = /usr/lib/php/20190902/opcache.so
- 重启PHP-FPM服务:
sudo systemctl restart php7.4-fpm
监控PHP-FPM状态
- 使用systemd:
sudo systemctl status php7.4-fpm
- 使用top或htop:
top
htop
- 使用ps命令:
ps aux | grep php-fpm
- 使用netstat或ss命令:
netstat -tuln | grep php7.4-fpm
- 使用php-fpm-stat:
sudo apt-get install php-fpm-stat
php-fpm-stat
- 使用第三方监控工具:
- Prometheus和Grafana:安装并配置这些工具以监控PHP-FPM的性能指标。
- Zabbix、Monit和Nagios:这些工具可以帮助你设置警报,以便在PHP-FPM出现问题时及时收到通知。
通过以上步骤,你可以在Ubuntu上优化PHP-FPM的性能,确保你的PHP应用程序能够高效运行。