1. 启用并优化OPcache(最有效的性能提升手段)
OPcache是PHP内置的字节码缓存扩展,可避免重复编译脚本,显著减少CPU占用。需通过以下步骤配置:
sudo yum install php-opcache(CentOS默认仓库通常包含该扩展);/etc/php.ini,添加或修改以下参数:[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128 # 缓存内存大小(MB),根据服务器内存调整(如256MB)
opcache.interned_strings_buffer=8 # 内部字符串缓存大小(MB)
opcache.max_accelerated_files=4000 # 可缓存的脚本文件数量(根据项目文件数调整)
opcache.revalidate_freq=60 # 脚本更新检查频率(秒),生产环境可设为0(禁用检查)或更高
opcache.fast_shutdown=1 # 快速关闭机制,提升脚本结束时的资源回收速度
sudo systemctl restart php-fpm。2. 优化PHP-FPM进程管理
PHP-FPM(FastCGI进程管理器)的进程配置直接影响并发处理能力。需根据服务器内存调整/etc/php-fpm.d/www.conf中的参数:
dynamic(动态调整进程数,适合大多数场景);pm = dynamic
pm.max_children = 50 # 最大子进程数(建议值为:(服务器可用内存 - 1GB)/单个PHP进程内存(如256MB),即(8GB-1GB)/0.25GB≈28,可根据实际情况调整)
pm.start_servers = 5 # 启动时的进程数
pm.min_spare_servers = 5 # 最小空闲进程数(保持空闲进程,避免频繁创建)
pm.max_spare_servers = 35 # 最大空闲进程数(避免空闲进程占用过多内存)
pm.max_requests = 500 # 每个子进程处理的最大请求数(防止内存泄漏,达到阈值后重启进程)
sudo systemctl restart php-fpm。3. 调整Web服务器配置(Nginx/Apache)
worker_processes auto;;events {
worker_connections 1024; # 每个进程的最大连接数
use epoll; # Linux下高性能的事件驱动模式
}
http {
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml;
}
event MPM(替代传统的prefork,提升并发能力);KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 65
location ~ \.php$ {
fastcgi_pass unix:/run/php-fpm/www.sock; # 使用Unix socket(性能优于TCP)
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
4. 使用缓存系统(减少数据库和计算负载)
对于动态内容(如数据库查询结果、页面片段),使用缓存可显著降低服务器负载:
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$cacheKey = 'user_data_' . $userId;
if (!$data = $redis->get($cacheKey)) {
$data = $db->query("SELECT * FROM users WHERE id = $userId")->fetch();
$redis->set($cacheKey, $data, 3600); // 缓存1小时
}
5. 优化数据库性能(解决慢查询瓶颈)
数据库查询慢是PHP运行缓慢的常见原因,需通过以下方式优化:
CREATE INDEX idx_username ON users(username);
SELECT *(只查询需要的字段),使用EXPLAIN分析查询执行计划,避免全表扫描;OPTIMIZE TABLE整理表碎片(针对MyISAM表),清理无用数据;PDO::ATTR_PERSISTENT => true)或连接池工具(如ProxySQL),减少数据库连接建立的开销。6. 代码层面优化(减少不必要的开销)
strlen()、array_map())比自定义函数更高效,避免重复造轮子;require_once/include_once:这些函数会检查文件是否已包含,增加额外开销,若确定文件不会重复包含,使用require/include即可;function add(int $a, int $b): int),可提升性能并增强代码可读性。7. 升级PHP版本(获得性能改进和安全修复)
新版本的PHP通常包含性能优化(如Zend引擎改进、JIT编译器支持)和安全修复。建议升级到最新的稳定版本(如PHP 8.3):
sudo yum update php
升级前需备份代码和数据库,确保兼容性(如检查扩展是否支持新版本)。
8. 监控与分析性能瓶颈
使用工具定位性能瓶颈,针对性优化:
top、htop、vmstat查看CPU、内存、磁盘使用情况,判断是否因资源不足导致缓慢;Xdebug或Blackfire生成性能分析报告,找出耗时函数或脚本;www.conf中设置pm.status_path = /status),通过Nginx/Apache访问/status查看进程状态(如活跃进程数、请求处理时间)。