1. 启用并优化OPcache扩展
OPcache是PHP的字节码缓存工具,可避免重复编译脚本,显著提升执行速度。安装与配置步骤如下:
sudo apt install php-opcache(Ubuntu默认仓库包含该扩展)。php.ini(路径可通过php --ini查看),添加/修改以下参数:[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128 # 缓存内存大小(MB),根据服务器内存调整
opcache.max_accelerated_files=4000 # 缓存文件数量上限
opcache.revalidate_freq=60 # 脚本修改后重新验证的时间间隔(秒)
opcache.fast_shutdown=1 # 快速关闭机制,减少内存释放时间
sudo systemctl restart php-fpm(或对应Web服务器,如Apache/Nginx)。2. 调整PHP-FPM进程配置
PHP-FPM(FastCGI进程管理器)比传统mod_php更高效,需根据服务器负载优化进程参数:
/etc/php/8.2/fpm/pool.d/www.conf),调整以下参数:pm = dynamic # 推荐动态模式,根据负载自动调整进程数
pm.max_children = 50 # 最大子进程数(需满足:总内存 >= pm.max_children × (memory_limit + 其他开销))
pm.start_servers = 10 # 启动时的进程数(建议为pm.max_children的1/5~1/3)
pm.min_spare_servers = 5 # 最小空闲进程数(避免频繁创建进程)
pm.max_spare_servers = 20 # 最大空闲进程数(避免内存浪费)
pm.max_requests = 500 # 每个子进程处理的最大请求数(防内存泄漏)
sudo systemctl restart php-fpm。3. 优化Web服务器配置
event模型在高并发场景下性能更优,且资源占用更低。配置Nginx与PHP-FPM通信(示例):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;
}
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_comp_level 6; # 压缩级别(1-9,6为平衡点)
keepalive_timeout 65;
keepalive_requests 100;
4. 使用缓存技术减少数据库负载
sudo apt install php-redis。php.ini添加extension=redis.so,重启PHP服务。$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$cacheKey = 'user_data_' . $userId;
if ($data = $redis->get($cacheKey)) {
// 使用缓存数据
} else {
// 查询数据库
$data = $db->query("SELECT * FROM users WHERE id = $userId");
$redis->setex($cacheKey, 3600, $data); // 缓存1小时
}
5. 优化PHP代码性能
JOIN替代多次查询,避免SELECT *(只查询所需字段)。prepare()方法)。strlen()、str_replace())经过高度优化,比自定义函数更快。unset()释放内存,避免内存泄漏。6. 升级PHP版本
使用最新稳定版PHP(如PHP 8.2),新版本通常包含性能改进(如JIT编译器、更高效的引擎)和安全修复。升级步骤:
sudo add-apt-repository ppa:ondrej/php。sudo apt update。sudo apt install php8.2 php8.2-cli php8.2-fpm php8.2-opcache php8.2-mysql。sudo update-alternatives --config php。7. 监控与分析性能瓶颈
php-fpm.conf(或www.conf)添加:slowlog = /var/log/php-fpm/slow.log
request_slowlog_timeout = 1s # 超过1秒的请求记录到慢日志