1. 更新系统与软件包
确保系统和所有PHP相关软件包为最新版本,以获取性能改进和安全修复:
sudo apt update && sudo apt upgrade -y
2. 安装PHP及必要扩展
根据应用需求安装PHP核心版本(如PHP 8.2)及常用扩展(如MySQL、GD、CURL、OPcache):
sudo apt install php8.2 php8.2-cli php8.2-fpm php8.2-mysql php8.2-gd php8.2-curl php8.2-mbstring php8.2-xml php8.2-opcache -y
3. 配置PHP-FPM进程管理
编辑PHP-FPM进程池配置文件(路径随PHP版本变化,如/etc/php/8.2/fpm/pool.d/www.conf),优化进程参数以平衡性能与资源占用:
pm = dynamic # 动态进程管理模式
pm.max_children = 50 # 最大子进程数(根据服务器内存调整,如1GB内存可设为30-50)
pm.start_servers = 5 # 启动时的子进程数
pm.min_spare_servers = 5 # 最小空闲子进程数
pm.max_spare_servers = 35 # 最大空闲子进程数
pm.max_requests = 3000 # 每个子进程处理的最大请求数(避免内存泄漏)
request_terminate_timeout = 300 # 请求超时时间(秒,防止长时间脚本占用资源)
修改后重启PHP-FPM服务:
sudo systemctl restart php8.2-fpm
4. 启用并配置OPcache加速
OPcache是PHP脚本字节码缓存工具,能显著减少脚本编译时间。安装并启用:
sudo apt install php8.2-opcache -y
编辑php.ini(如/etc/php/8.2/fpm/php.ini),添加或修改以下参数:
[opcache]
zend_extension=opcache.so # 启用OPcache扩展
opcache.enable=1 # 开启OPcache
opcache.memory_consumption=128 # OPcache缓存大小(MB,根据内存调整,如2GB内存可设为256)
opcache.interned_strings_buffer=8 # 内部字符串缓存大小(MB)
opcache.max_accelerated_files=10000 # 最大加速文件数(根据项目文件数量调整)
opcache.revalidate_freq=60 # 脚本重新验证频率(秒,生产环境可设为0禁用检查)
opcache.fast_shutdown=1 # 快速关闭功能(提升脚本结束时的内存回收效率)
重启PHP-FPM使配置生效:
sudo systemctl restart php8.2-fpm
5. 优化Web服务器配置
编辑Nginx站点配置文件(如/etc/nginx/sites-available/default),添加PHP处理逻辑并启用Gzip压缩:
server {
listen 80;
server_name example.com;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock; # 根据PHP版本调整socket路径
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# Gzip压缩(减少传输体积)
gzip on;
gzip_comp_level 6;
gzip_min_length 256;
gzip_proxied any;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
}
测试配置并重启Nginx:
sudo nginx -t && sudo systemctl restart nginx
编辑Apache虚拟主机配置文件(如/etc/apache2/sites-available/000-default.conf),启用PHP-FPM处理并压缩:
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/html
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost"
</FilesMatch>
# 启用Gzip模块
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/css application/javascript application/json
</IfModule>
</VirtualHost>
启用模块并重启Apache:
sudo a2enmod proxy_fcgi setenvif deflate
sudo systemctl restart apache2
6. 数据库连接与查询优化
在PHP代码中使用p:前缀创建持久数据库连接(如MySQLi),减少连接建立开销:
$mysqli = new mysqli('p:localhost', 'username', 'password', 'database');
调整MySQL/MariaDB配置(如/etc/mysql/my.cnf),提升数据库性能:
[mysqld]
innodb_buffer_pool_size = 70% of total RAM # InnoDB缓冲池大小(占内存70%,如1GB内存设为768M)
innodb_log_file_size = 256M # 日志文件大小
query_cache_size = 64M # 查询缓存大小(适用于读多写少场景)
query_cache_type = 1 # 开启查询缓存
优化后重启MySQL:
sudo systemctl restart mysql
使用EXPLAIN分析慢查询,添加索引(如主键、唯一索引),避免SELECT *(只查询所需字段),减少数据库负载。
7. 内存管理与代码优化
根据应用需求修改php.ini中的memory_limit(如256M):
memory_limit = 256M
unset()释放不再使用的变量(如大型数组、数据库对象);LIMIT 1000 OFFSET 0)或生成器(yield),避免一次性加载全部数据到内存;8. 监控与维护
htop、top监控系统资源(CPU、内存、进程);/var/log/php8.2-fpm.log)和Web服务器日志(如Nginx的/var/log/nginx/error.log),及时发现错误和性能瓶颈;/var/log/下的旧日志),释放磁盘空间。