1. 调整PHP-FPM进程池配置
PHP-FPM的进程池参数直接影响并发处理能力。需根据服务器资源(内存、CPU核心数)调整:
(可用内存 - 1G) / 单个PHP进程内存占用(单个进程内存可通过top命令查看,单位MB)。例如,服务器有4GB内存,单个进程占用200MB,则pm.max_children可设为(4096-1024)/200≈15。pm.max_children的1/4~1/2(如pm.max_children=50,则设为12~25),避免启动时占用过多资源。2. 启用并优化OPcache加速
OPcache是PHP内置的字节码缓存扩展,可避免重复编译PHP脚本,显著提升执行效率。
sudo yum install php-opcache(CentOS默认包含)。php.ini:[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128 # 缓存内存大小(MB),根据服务器内存调整
opcache.interned_strings_buffer=8 # 内部字符串缓存大小
opcache.max_accelerated_files=4000 # 最大加速文件数(需覆盖项目文件数量)
opcache.revalidate_freq=60 # 文件更新检查频率(秒),生产环境设为60~3600
opcache.fast_shutdown=1 # 快速释放内存
sudo systemctl restart php-fpm。3. 优化PHP配置文件(php.ini)
调整PHP基础参数,减少资源消耗:
exec,passthru,shell_exec),防止恶意利用(需根据业务需求调整,避免禁用必要函数)。upload_max_filesize=50M、post_max_size=50M),适应大文件上传需求。4. 使用反向代理分流静态资源
通过Nginx/Apache等反向代理处理静态资源(图片、CSS、JS),减少PHP-FPM的负载。
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-fpm/www.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 静态资源配置
location ~* \.(jpg|jpeg|png|gif|ico|css|js|pdf)$ {
expires 30d; # 缓存30天
access_log off;
add_header Cache-Control "public";
}
}
sudo systemctl restart nginx。5. 引入缓存机制降低数据库负载
使用Redis/Memcached缓存数据库查询结果或动态页面片段,减少重复查询。
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$cacheKey = 'user_data_' . $userId;
$data = $redis->get($cacheKey);
if (!$data) {
// 缓存未命中,从数据库获取
$data = $db->query("SELECT * FROM users WHERE id = $userId")->fetch();
$redis->set($cacheKey, $data, 3600); // 缓存1小时
}
echo $data;
sudo yum install php-redis,重启PHP-FPM。6. 开启慢日志定位性能瓶颈
通过慢日志记录执行时间过长的请求,针对性优化。
php-fpm.conf(或www.conf):slowlog = /var/log/php-fpm/www-slow.log
request_slowlog_timeout = 2 # 超过2秒的请求记录到慢日志
php_admin_value[slowlog] = /var/log/php-fpm/www-slow.log
php_admin_flag[log_errors] = on
tail -f /var/log/php-fpm/www-slow.log查看慢请求,分析SQL查询、代码逻辑等问题。7. 监控与定期维护
使用工具监控PHP-FPM状态,及时调整配置:
top(查看CPU/内存占用)、htop(更直观的资源使用)、php-fpm status(查看进程池状态,需开启pm.status_path)。grep、awk分析慢日志,找出高频慢请求。sudo systemctl restart php-fpm),释放累积内存。