1. 更新系统和PHP版本
确保Debian系统及所有软件包(尤其是PHP)为最新版本,新版本通常包含性能改进与安全修复。执行以下命令更新系统:
sudo apt update && sudo apt upgrade -y
若需升级PHP版本(如从7.4升至8.2),可通过sudo apt install php8.2 php8.2-fpm php8.2-mysql等命令安装新版本,并禁用旧版本模块。
2. 使用PHP-FPM替代传统模式
PHP-FPM(FastCGI Process Manager)比Apache的mod_php更高效,能更好地管理并发请求与进程资源。安装并配置PHP-FPM:
sudo apt install php-fpm
编辑PHP-FPM池配置文件(如/etc/php/8.2/fpm/pool.d/www.conf),调整进程管理参数以匹配服务器资源:
pm = dynamic # 动态调整进程数
pm.max_children = 50 # 最大子进程数(根据内存计算:总内存/单个进程内存)
pm.start_servers = 10 # 启动时的进程数
pm.min_spare_servers = 5 # 最小空闲进程数
pm.max_spare_servers = 20 # 最大空闲进程数
request_terminate_timeout = 30 # 请求超时时间(秒)
重启PHP-FPM使配置生效:sudo systemctl restart php8.2-fpm。
3. 启用并优化OPcache
OPcache是PHP内置的字节码缓存,可显著减少脚本解析时间。安装OPcache扩展:
sudo apt install php-opcache
编辑php.ini(如/etc/php/8.2/fpm/php.ini),启用并配置OPcache:
[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128 # OPcache内存大小(MB,根据服务器内存调整)
opcache.interned_strings_buffer=8 # 内部字符串缓冲区大小
opcache.max_accelerated_files=10000 # 最大加速文件数(需覆盖项目文件数量)
opcache.revalidate_freq=60 # 文件修改检查频率(秒)
opcache.fast_shutdown=1 # 快速关闭功能
重启PHP-FPM使OPcache生效。
4. 优化Web服务器配置
Nginx + PHP-FPM组合:Nginx处理静态文件更高效,动态请求转发给PHP-FPM。编辑Nginx站点配置(如/etc/nginx/sites-available/default),添加以下location块:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock; # 根据PHP版本调整sock路径
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
测试Nginx配置并重启:sudo nginx -t && sudo systemctl restart nginx。
Apache优化:若使用Apache,将mpm_prefork替换为mpm_event(更适合高并发),并配置PHP-FPM处理.php文件(参考Nginx的fastcgi_pass配置)。
5. 引入缓存系统
使用Redis或Memcached缓存频繁访问的数据(如数据库查询结果、会话数据),减少数据库负载。以Redis为例:
sudo apt install php-redis redis-server
编辑php.ini启用Redis扩展:extension=redis.so,重启PHP-FPM。在PHP代码中使用Redis缓存:
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$key = 'expensive_query_result';
if ($redis->exists($key)) {
$data = $redis->get($key);
} else {
$data = // 执行数据库查询
$redis->setex($key, 3600, $data); // 缓存1小时
}
6. 优化PHP代码
function add(int $a, int $b): int {
return $a + $b;
}
$cache数组)。yield)能减少内存占用,例如:function getLargeData() {
for ($i = 0; $i < 1000000; $i++) {
yield $i;
}
}
7. 数据库优化
SELECT *,只查询所需字段;添加索引(如CREATE INDEX idx_column ON table_name(column_name))。OPTIMIZE TABLE整理表碎片,提升查询效率。8. 监控与持续优化
使用工具监控服务器资源(如htop、glances)与PHP性能(如New Relic、Blackfire),识别瓶颈(如高CPU占用的脚本、内存泄漏),针对性调整配置。