1. 安装并配置OPcache扩展
OPcache是PHP内置的字节码缓存扩展,可避免重复编译PHP脚本,显著提升执行效率。安装命令:sudo apt install php-opcache(Ubuntu默认仓库包含)。配置关键参数(以PHP 8.2为例,路径/etc/php/8.2/fpm/php.ini):
zend_extension=opcache.so:启用扩展;opcache.enable=1:开启字节码缓存;opcache.memory_consumption=128:分配128MB内存用于缓存(根据服务器内存调整,建议128-256MB);opcache.max_accelerated_files=4000:缓存最多4000个脚本文件(需大于项目中PHP文件总数);opcache.revalidate_freq=2:每2秒检查脚本是否有修改(开发环境设为0,生产环境设为2-60);opcache.fast_shutdown=1:加速脚本关闭流程。sudo systemctl restart php8.2-fpm。2. 使用最新稳定版PHP
新版本PHP通常包含性能优化(如JIT编译器、引擎改进)和安全修复。通过Ondrej Sur的PPA安装最新版(支持PHP 8.2+):
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确认版本,替换旧版本的Apache/Nginx PHP模块(如sudo apt remove php7.4-fpm)。
3. 优化PHP-FPM进程管理
PHP-FPM(FastCGI进程管理器)比传统mod_php更高效,需根据服务器负载调整进程参数(路径/etc/php/8.2/fpm/pool.d/www.conf):
static:固定进程数(适合负载稳定的生产环境,如pm.max_children=50);dynamic:动态调整(适合负载波动的环境,需设置pm.start_servers、pm.min_spare_servers、pm.max_spare_servers,如start=10、min=5、max=20);ondemand:按需启动(适合低流量环境,如pm.max_children=20,请求来时启动进程)。pm.max_requests=500(每个子进程处理500个请求后重启,防止内存泄漏);request_terminate_timeout=30s(防止单个请求占用过多时间)。sudo systemctl restart php8.2-fpm。4. 启用HTTP压缩(Gzip)
通过压缩响应内容减少传输数据量,提升页面加载速度。在PHP配置文件(/etc/php/8.2/fpm/php.ini)中添加:
zlib.output_compression = On
zlib.output_compression_level = 6 # 压缩级别(1-9,6为平衡值)
或通过Nginx/Apache配置(如Nginx的gzip on;指令),双重压缩效果更佳。
5. 引入缓存层(Redis/Memcached)
将频繁访问的数据(如数据库查询结果、会话数据)存储在内存中,减少数据库访问次数。以Redis为例:
sudo apt install redis-server php-redis;/etc/php/8.2/fpm/php.ini):session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379"
Redis::get()/Redis::set()替代直接数据库查询)。6. 优化数据库交互
php.ini中设置mysqli.allow_persistent=On、mysqli.max_persistent=100;PDO配置pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock);SELECT *、使用预处理语句(防止SQL注入);ProxySQL)减少连接创建成本。7. 代码级性能优化
str_replace()替代正则表达式(当不需要复杂匹配时);unset()),避免内存泄漏。8. 监控与持续调优
使用工具监控PHP性能,定位瓶颈:
sudo apt install php-fpm后,在www.conf中启用pm.status_path = /status,访问http://server-ip/status查看进程状态;htop(查看CPU/内存使用)、top(实时进程监控)、vmstat(系统整体性能)。pm.max_children应对高并发)。