1. 安装并配置OPcache扩展
OPcache是PHP内置的字节码缓存扩展,可显著减少脚本编译次数,提升执行效率。安装命令:sudo apt install php-opcache(Ubuntu 22.04+默认包含)。编辑PHP配置文件(路径取决于PHP版本和Web服务器,如/etc/php/8.2/fpm/php.ini),添加或修改以下参数:
zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128 # 缓存内存大小(MB),根据服务器内存调整
opcache.interned_strings_buffer=8 # 内部字符串缓冲区大小
opcache.max_accelerated_files=10000 # 最大加速文件数(需覆盖项目文件数量)
opcache.revalidate_freq=60 # 文件修改检查频率(秒)
opcache.fast_shutdown=1 # 快速关闭功能
重启PHP-FPM或Apache使配置生效:sudo systemctl restart php8.2-fpm。
2. 使用最新稳定版PHP
新版本PHP通常包含性能优化和bug修复,建议通过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 # 根据需求安装扩展
安装后,禁用旧版本PHP并启用新版本:sudo a2dismod php7.4 && sudo a2enmod php8.2(Apache),或修改Nginx配置中的fastcgi_pass指向新版本PHP-FPM socket。
3. 优化PHP-FPM进程配置
PHP-FPM是PHP的FastCGI进程管理器,合理配置进程数能平衡性能与资源占用。编辑/etc/php/8.2/fpm/pool.d/www.conf,调整以下参数:
dynamic(动态调整,适合负载波动大的环境);pm = dynamic
pm.max_children = 50 # 最大子进程数(根据服务器内存计算:总内存/单个进程内存,如2GB内存约设30-40)
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代码中使用phpredis扩展(sudo apt install php-redis)或Predis库连接Redis。配置示例(php.ini):
extension=redis.so
对于Memcached:sudo apt install memcached php-memcached,同样需在代码中集成。
5. 优化Web服务器配置
worker_processes(设为CPU核心数)、worker_connections(每个进程的最大连接数),启用gzip压缩和sendfile:events {
worker_connections 1024;
}
http {
sendfile on;
gzip on;
gzip_types text/plain text/css application/json application/javascript;
}
mod_deflate(压缩)和mod_expires(缓存静态资源),调整KeepAlive设置:<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/css application/javascript
</IfModule>
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/html "access plus 1 hour"
</IfModule>
KeepAlive On
KeepAliveTimeout 5
MaxKeepAliveRequests 100
重启Web服务器:sudo systemctl restart nginx或sudo systemctl restart apache2。6. 代码级优化
7. 监控与调优
使用工具监控PHP性能,定位瓶颈:
top(查看CPU/内存占用)、htop(更直观的资源监控)、vmstat(系统整体性能);Blackfire(可视化性能分析)、XHProf(Facebook开源的性能分析工具);slowlog(慢请求日志),定位执行时间过长的脚本。