1. 更新系统与PHP版本
保持Debian系统和PHP为最新版本,以获取性能改进和安全补丁。执行以下命令更新系统及PHP:
sudo apt update && sudo apt upgrade -y
建议使用Debian稳定分支的最新PHP版本(如PHP 8.2),新版本通常包含更高效的代码执行逻辑和内存管理优化。
2. 配置PHP-FPM进程管理
若使用PHP-FPM(推荐用于高并发场景),需调整/etc/php/{version}/fpm/pool.d/www.conf中的进程池参数,匹配服务器资源:
可用内存 / 单个PHP进程内存,单个进程内存可通过ps aux | grep php-fpm估算);pm.max_children的1/4-1/2);sudo systemctl restart php{version}-fpm
3. 启用并优化OPcache
OPcache通过缓存PHP脚本的字节码,减少重复解析和编译,显著提升执行速度。安装并配置:
sudo apt install php-opcache -y
编辑php.ini(路径取决于PHP版本,如/etc/php/8.2/fpm/php.ini),添加以下配置:
[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128 # OPcache缓存大小(MB,根据服务器内存调整)
opcache.interned_strings_buffer=8 # 内部字符串缓冲区大小(MB)
opcache.max_accelerated_files=4000 # 最大加速文件数(根据项目文件数量调整)
opcache.revalidate_freq=60 # 文件修改检查频率(秒,生产环境可设为0禁用)
opcache.fast_shutdown=1 # 快速关闭,减少内存释放时间
4. 优化数据库交互
数据库查询是PHP应用的常见性能瓶颈,需采取以下措施:
p:前缀连接数据库(如new mysqli('p:localhost', 'user', 'password', 'db')),减少连接创建开销;ALTER TABLE table_name ADD INDEX (column_name)),避免SELECT *(只查询所需字段),使用EXPLAIN分析慢查询;$redis->set('key', 'value', 3600); // 缓存1小时)。5. 调整PHP配置参数
修改php.ini(或FPM的php.ini)中的关键参数,适配应用需求:
256M,避免过大导致内存浪费或过小导致脚本终止);300秒,适用于长时间运行的任务,如数据导入);50M,适配文件上传需求);E_ALL & ~E_NOTICE & ~E_STRICT,关闭display_errors(避免泄露敏感信息),开启log_errors(记录错误到/var/log/php_errors.log)。6. 使用高性能Web服务器
推荐使用Nginx + PHP-FPM组合(替代Apache的mod_php),提升静态文件处理和并发能力:
sudo apt install nginx php-fpm -y
/etc/nginx/sites-available/default):location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php{version}-fpm.sock; # 根据PHP版本调整
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
sudo systemctl restart nginx php{version}-fpm
7. 引入缓存系统
使用Redis或Memcached缓存频繁访问的数据,减少数据库负载和PHP计算量:
sudo apt install redis-server php-redis -y
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$data = $redis->get('cached_data');
if (!$data) {
$data = fetchDataFromDatabase(); // 从数据库获取数据
$redis->set('cached_data', $data, 3600); // 缓存1小时
}
echo $data;
8. 监控与性能分析
使用工具监控PHP性能,定位瓶颈:
xdebug.mode=profile,xdebug.output_dir=/tmp),分析脚本执行时间和内存消耗;9. 代码层面优化
getSum(1, 2)替换为直接计算3);echo 'Hello, World!');file_get_contents+file_put_contents)或内存文件系统(如tmpfs)减少磁盘I/O;yield按需生成数据,避免一次性加载到内存(示例:function readLargeFile($file) { $handle = fopen($file, 'r'); while ($line = fgets($handle)) { yield $line; } fclose($handle); })。