1. 安装并配置OPcache扩展
OPcache是PHP的核心性能加速工具,通过缓存编译后的字节码,避免重复解析和编译,显著提升脚本执行速度。在Ubuntu上,首先通过sudo apt install php-opcache安装扩展,然后编辑/etc/php/{version}/fpm/php.ini(如/etc/php/8.2/fpm/php.ini),启用并优化配置:
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128 # 根据服务器内存调整(如128M或256M)
opcache.max_accelerated_files=4000 # 根据项目文件数量调整
opcache.revalidate_freq=2 # 文件修改后重新验证的频率(秒)
opcache.fast_shutdown=1 # 加速脚本关闭流程
修改后重启PHP-FPM(sudo systemctl restart php{version}-fpm)使配置生效。
2. 优化PHP-FPM进程管理
PHP-FPM(FastCGI Process Manager)是Ubuntu上PHP的高效处理引擎,其进程管理模式直接影响性能。编辑/etc/php/{version}/fpm/pool.d/www.conf,重点调整以下参数:
dynamic(动态模式),适合大多数负载场景;若负载稳定,可选择static(固定进程数)。pm = dynamic
pm.max_children = 50 # 最大子进程数(根据服务器内存计算:如1GB内存可设30-50)
pm.start_servers = 5 # 启动时的子进程数
pm.min_spare_servers = 5 # 最小空闲子进程数(避免频繁创建)
pm.max_spare_servers = 35 # 最大空闲子进程数(避免资源浪费)
pm.max_requests = 500 # 每个子进程处理的最大请求数(防止内存泄漏)
调整后重启PHP-FPM服务。
3. 升级到最新稳定版PHP
新版本PHP通常包含性能改进、安全修复和bug修复。Ubuntu默认仓库的PHP版本可能较旧,可通过Ondrej Sur的PPA安装最新版:
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php8.2 php8.2-cli php8.2-fpm php8.2-mysql php8.2-curl # 根据需求安装扩展
安装后,通过php -v确认版本,并切换Web服务器(如Nginx/Apache)到新版本PHP。
4. 使用缓存技术减少数据库负载
数据库查询是PHP应用的常见性能瓶颈,使用缓存可显著减少数据库访问次数。推荐安装Redis或Memcached:
sudo apt install redis-server php-redis,然后在PHP代码中使用Redis类连接缓存。sudo apt install memcached php-memcached。5. 优化PHP配置参数
调整php.ini中的关键参数,平衡性能与资源使用:
memory_limit = 256M # 每个PHP进程的最大内存(根据应用需求调整,避免过大导致内存溢出)
max_execution_time = 30 # 脚本最大执行时间(秒,避免长时间运行脚本占用资源)
post_max_size = 32M # POST请求最大数据量(根据上传文件大小调整)
upload_max_filesize = 32M # 上传文件最大大小
max_input_vars = 3000 # 每个请求的最大变量数量(避免过多变量消耗内存)
修改后重启PHP-FPM或Web服务器。
6. 代码级性能优化
file_get_contents或file_put_contents调用。yield替代数组,避免一次性加载所有数据到内存(如读取大型CSV文件)。unset()释放不再使用的变量(如大型数组、数据库连接),配合垃圾回收机制减少内存占用。7. 优化数据库连接
mysqli或PDO持久连接)。在php.ini中启用:mysqli.allow_persistent = On
mysqli.max_persistent = 100 # 最大持久连接数
ProxySQL)复用连接,避免频繁创建和销毁连接。8. 监控与持续调优
使用工具监控PHP和服务器性能,找出瓶颈并针对性优化:
sudo systemctl status php{version}-fpm查看进程状态,或配置pm.status_path(如/status)通过Web访问状态页。slowlog = /var/log/php-fpm/www-slow.log
request_slowlog_timeout = 10s # 超过10秒的请求记录到慢日志
New Relic、Blackfire或Prometheus+Grafana监控应用性能,分析内存使用、CPU占用和数据库查询时间。