1. 启用并优化OPcache
OPcache是PHP性能提升的关键工具,通过缓存编译后的字节码,避免重复解析和编译,显著减少脚本执行时间。
sudo apt install php-opcache安装(适用于PHP 7.x/8.x)。/etc/php/{version}/fpm/php.ini(如/etc/php/8.2/fpm/php.ini),添加或修改以下参数:zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128 # 缓存内存大小(MB),根据服务器内存调整
opcache.max_accelerated_files=10000 # 缓存文件数量,建议设置为项目文件总数的1.5倍
opcache.revalidate_freq=60 # 文件修改检查频率(秒),生产环境可设为0(禁用动态检查)
opcache.fast_shutdown=1 # 快速关闭,释放内存
sudo systemctl restart php{version}-fpm使配置生效。2. 优化PHP-FPM进程管理
PHP-FPM(FastCGI Process Manager)是处理PHP请求的高效方式,合理配置进程参数可平衡性能与资源消耗。
static:固定进程数(适合负载稳定的环境),配置pm.max_children即可。dynamic:动态调整进程数(适合负载波动的环境),需设置:pm = dynamic
pm.max_children = 50 # 最大子进程数(根据服务器内存计算:如2GB内存,每个进程100MB,则设为20)
pm.start_servers = 10 # 启动时的进程数
pm.min_spare_servers = 5 # 最小空闲进程数
pm.max_spare_servers = 20 # 最大空闲进程数
ondemand:按需启动进程(适合请求量小的环境),设置pm.max_children和pm.process_idle_timeout(空闲进程存活时间)。request_terminate_timeout = 30s # 请求超时时间,防止长时间运行的脚本占用资源
pm.max_requests = 500 # 每个子进程处理的请求数,超过则重启(防止内存泄漏)
sudo systemctl restart php{version}-fpm。3. 使用最新稳定版PHP
新版本PHP通常包含性能改进、安全修复和优化(如PHP 8.x的JIT编译器提升CPU密集型任务性能)。
sudo add-apt-repository ppa:ondrej/php(支持PHP 7.4+)。sudo apt update && sudo apt install php8.2 php8.2-fpm php8.2-mysql(以PHP 8.2为例)。update-alternatives或sudo update-alternatives --config php选择默认版本。4. 配置高效的Web服务器
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock; # 使用Unix Socket(比TCP更快)
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
mod_proxy_fcgi和KeepAlive,调整MaxClients(最大客户端数)和StartServers(启动时的服务器数)以匹配服务器资源。5. 引入缓存层减少数据库负载
数据库查询是PHP应用的常见瓶颈,使用缓存可显著减少数据库访问次数。
sudo apt install redis-server
sudo systemctl enable --now redis-server
在PHP代码中使用Redis扩展(php-redis)缓存频繁访问的数据(如数据库查询结果、会话数据)。mysqlnd_ms)减少连接开销。6. 代码级性能优化
7. 监控与持续调优
htop(查看CPU/内存使用率)、top(查看进程资源占用)、php-fpm status(查看PHP-FPM进程状态)监控系统状态。slowlog = /var/log/php-fpm/slow.log),分析慢请求的原因(如慢查询、复杂逻辑)。pm.max_children)、OPcache内存大小(opcache.memory_consumption)等参数,适应业务增长。