1. 安装并配置OPcache(核心字节码缓存)
OPcache是PHP官方推出的字节码缓存扩展,可避免重复编译PHP脚本,显著提升执行效率。Ubuntu下安装与配置步骤如下:
php-opcache(适配当前PHP版本,如php8.2-opcache);/etc/php/{version}/fpm/php.ini(PHP-FPM)或/etc/php/{version}/cli/php.ini(命令行),添加/修改以下参数:[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128 # 缓存内存大小(MB),根据服务器内存调整
opcache.max_accelerated_files=4000 # 缓存文件数量上限
opcache.revalidate_freq=2 # 文件修改后重新验证间隔(秒)
opcache.fast_shutdown=1 # 快速关闭机制,减少内存释放时间
sudo systemctl restart php{version}-fpm)或Apache(sudo systemctl restart apache2)使更改生效。2. 优化PHP-FPM进程管理
PHP-FPM(FastCGI Process Manager)比传统mod_php更适合高并发场景,需调整进程池参数以匹配服务器资源:
/etc/php/{version}/fpm/pool.d/www.conf,调整以下核心参数:pm.max_children = 50 # 最大子进程数(根据服务器内存计算:总内存/单个进程内存,如1GB内存约设20-30)
pm.start_servers = 10 # 启动时的子进程数
pm.min_spare_servers = 5 # 最小空闲进程数(避免频繁创建进程)
pm.max_spare_servers = 20 # 最大空闲进程数(避免资源浪费)
pm.max_requests = 1000 # 每个子进程处理的最大请求数(防止内存泄漏)
3. 升级至最新稳定版PHP
新版本PHP通常包含性能改进、安全修复和优化(如PHP 8.x的JIT编译器)。通过以下步骤升级:
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-curl # 根据需求选择扩展
sudo update-alternatives --config php # 交互式选择默认PHP版本
4. 使用高效的Web服务器
sudo apt install nginx
sudo systemctl stop apache2
sudo systemctl disable apache2
sudo systemctl enable nginx
sudo systemctl start nginx
/etc/nginx/sites-available/default),添加以下内容:location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; # 匹配PHP-FPM socket路径
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
sudo nginx -t # 测试配置语法
sudo systemctl restart nginx
5. 引入内存缓存(Redis/Memcached)
数据库查询是PHP应用的常见瓶颈,使用内存缓存(如Redis)可减少重复查询:
sudo apt install php-redis # 适配当前PHP版本
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$key = 'user_data_' . $userId;
if ($data = $redis->get($key)) {
return json_decode($data, true);
} else {
$data = $db->query("SELECT * FROM users WHERE id = $userId")->fetch();
$redis->setex($key, 3600, json_encode($data)); // 缓存1小时
return $data;
}
6. 代码级性能分析与优化
sudo pecl install xhprof-beta
echo "extension=xhprof.so" | sudo tee /etc/php/{version}/mods-available/xhprof.ini
sudo phpenmod xhprof
xhprof_enable(XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY); // 开启分析
// 业务代码(如函数调用、数据库查询)
$data = xhprof_disable(); // 停止分析并获取数据
file_put_contents('/tmp/xhprof_'.time().'.json', json_encode($data)); // 保存数据
http://localhost/xhprof/xhprof_html/index.php),查看函数调用次数、执行时间及内存占用。7. 数据库优化
EXPLAIN分析SQL语句,添加索引(如主键、唯一索引、复合索引),避免SELECT *(仅查询所需字段);prepare()方法);innodb_buffer_pool_size(InnoDB缓冲池大小,建议设为物理内存的50%-70%)、max_connections(最大连接数)等参数。8. 系统级优化
sudo sysctl -w net.core.somaxconn=4096 # 增加TCP监听队列长度
sudo sysctl -w net.ipv4.tcp_tw_reuse=1 # 重用TIME_WAIT状态的连接
sudo sysctl -w fs.file-max=65536 # 增加系统最大文件描述符数
echo "net.core.somaxconn=4096" | sudo tee -a /etc/sysctl.conf # 永久生效