1. 安装并启用OPcache扩展
OPcache是PHP内置的字节码缓存扩展,可显著减少脚本编译时间,提升重复请求的处理速度。安装命令:sudo apt install php-opcache(根据PHP版本调整,如php8.2-opcache)。启用步骤:编辑对应PHP版本的php.ini文件(如/etc/php/8.2/fpm/php.ini),添加或修改以下配置:
zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128M # 根据服务器内存调整(建议64-256M)
opcache.max_accelerated_files=4000 # 脚本文件数量上限(建议3000-5000)
opcache.revalidate_freq=2 # 脚本更新检查频率(秒)
opcache.fast_shutdown=1 # 快速关闭机制
重启PHP-FPM或Apache使配置生效:sudo systemctl restart php8.2-fpm。
2. 使用最新稳定版PHP
新版本PHP通常包含性能优化、安全修复和新特性。通过Ondrej Sur的PPA安装最新版(支持Ubuntu 22.04及以上):
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)指向新版本。
3. 优化PHP-FPM进程配置
PHP-FPM(FastCGI进程管理器)比传统mod_php更高效,需根据服务器负载调整进程参数(以/etc/php/8.2/fpm/pool.d/www.conf为例):
dynamic(动态调整,适合波动负载),其次ondemand(按需启动,适合低流量);pm = dynamic
pm.max_children = 50 # 最大子进程数(根据内存计算:总内存/单个进程内存,如2G内存≈50个64M进程)
pm.start_servers = 10 # 启动时的子进程数
pm.min_spare_servers = 5 # 最小空闲进程数(避免频繁创建)
pm.max_spare_servers = 20 # 最大空闲进程数(避免资源浪费)
pm.max_requests = 500 # 每个子进程处理的最大请求数(防止内存泄漏)
调整后重启PHP-FPM:sudo systemctl restart php8.2-fpm。
4. 配置缓存技术(Redis/Memcached)
使用Redis或Memcached缓存数据库查询结果、会话数据或常用数据,减少数据库访问次数。以Redis为例:
sudo apt install redis-server php-redis;php.ini(如/etc/php/8.2/fpm/php.ini),添加extension=redis.so;Redis类存储和读取数据(如$redis->set('key', 'value', 3600))。5. 优化数据库连接
php.ini中启用:mysqli.allow_persistent = On、mysqli.max_persistent = 100(限制最大持久连接数);ProxySQL)或调整数据库参数(如innodb_buffer_pool_size),提升数据库响应速度。6. 调整PHP配置参数
根据应用需求调整php.ini中的关键参数,避免资源浪费:
memory_limit:设置为128-256M(根据脚本内存需求调整,避免过大导致内存耗尽);max_execution_time:设置为30-300秒(根据脚本复杂度调整,避免长时间运行占用资源);post_max_size/upload_max_filesize:设置为32-100M(根据上传文件大小调整,如post_max_size = 50M、upload_max_filesize = 50M)。7. 代码级优化
foreach替代for遍历数组);O(n)优于O(n²));php.ini的disable_functions或disable_classes禁用不必要的扩展(如xdebug仅在调试时启用)。8. 监控与持续调优
使用工具监控PHP性能,定位瓶颈:
top、htop(查看CPU/内存使用)、php-fpm status(查看PHP-FPM进程状态);Blackfire(性能分析)、New Relic(应用监控)、Prometheus+Grafana(可视化监控);/var/log/php8.2-fpm.log)和慢日志(需开启slowlog参数),针对性优化。