1. 安装并配置OPcache加速脚本执行
OPcache是PHP的关键加速扩展,通过缓存编译后的字节码,避免重复解析和编译,显著提升脚本执行速度。安装命令:sudo apt install php-opcache(根据PHP版本调整,如php8.2-opcache)。配置php.ini(路径通常为/etc/php/{version}/fpm/php.ini或/etc/php/{version}/cli/php.ini),添加以下参数:
[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=64  # 缓存内存大小(MB),根据服务器内存调整
opcache.max_accelerated_files=4000  # 最大加速文件数,建议设置为项目中PHP文件总数的1.5倍
opcache.revalidate_freq=2  # 文件修改后重新验证的间隔(秒)
opcache.fast_shutdown=1  # 快速关闭机制,减少内存释放时间
重启PHP-FPM使配置生效:sudo systemctl restart php{version}-fpm。
2. 优化PHP-FPM进程管理
PHP-FPM(FastCGI Process Manager)比传统的mod_php更高效,需根据服务器资源调整进程参数。编辑/etc/php/{version}/fpm/pool.d/www.conf,重点配置以下参数:
dynamic(动态调整进程数,适合负载波动大的环境);(服务器总内存 - 系统预留内存) / 单个PHP进程内存(如服务器有8GB内存,单个PHP进程约占用100MB,则设置为70-80);pm.max_children的1/4-1/2;pm.max_spare_servers:空闲进程的最小/最大数量,保持足够的空闲进程应对突发请求,避免频繁创建/销毁进程;3. 升级到最新稳定版PHP
新版本PHP通常包含性能改进、安全修复和优化(如PHP 8.x引入的JIT编译器)。通过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 php8.2-gd  # 根据项目需求安装扩展
安装后,禁用旧版本并启用新版本:
sudo a2dismod php7.x  # 禁用旧版本(如7.4)
sudo a2enmod php8.2   # 启用新版本
sudo systemctl restart apache2  # 或php-fpm
4. 使用缓存技术减少数据库负载
引入内存缓存(如Redis或Memcached)缓存频繁访问的数据库查询结果、会话数据等,减少数据库连接和查询次数。以Redis为例:
sudo apt install redis-server;sudo apt install php-redis;php.ini中添加extension=redis.so);$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$data = $redis->get('cached_data');
if (!$data) {
    $data = $db->query("SELECT * FROM large_table")->fetchAll(); // 数据库查询
    $redis->set('cached_data', $data, 3600); // 缓存1小时
}
5. 优化PHP配置参数
调整php.ini中的关键参数,平衡性能与资源消耗:
upload_max_filesize:设置为合理值(如32M),适应文件上传需求;6. 优化Web服务器配置
选择高性能Web服务器(如Nginx)替代Apache,或优化Apache配置:
/etc/nginx/sites-available/default,添加PHP-FPM处理规则:location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php{version}-fpm.sock;  # 使用Unix Socket(比TCP更快)
}
mod_proxy_fcgi并配置SetHandler "proxy:unix:/var/run/php/php{version}-fpm.sock|fcgi://localhost",替代mod_php。7. 代码级优化减少资源消耗
unset()函数释放不再需要的变量(如大型数组、数据库结果集);yield生成器或array_chunk()处理大型数据集,避免一次性加载到内存;array_map()替代foreach循环),内置函数通常用C语言实现,效率更高。8. 监控与持续调优
使用工具监控PHP和服务器性能,识别瓶颈并针对性优化:
htop(查看CPU/内存使用)、iotop(查看磁盘I/O)、vmstat(查看系统整体性能);www.conf中启用pm.status_path = /status,通过sudo curl http://localhost/status查看进程数、请求数等指标;request_slowlog_timeout = 5s,slowlog = /var/log/php-fpm/slow.log),使用grep或工具(如Blackfire)分析慢脚本,定位性能瓶颈。