Laravel部署后CPU占用率过高问题求助
解决Laravel在Nginx反向代理下CPU占用过高的方案
一、优化Nginx反向代理配置(适配Laravel缓存)
Laravel完全可以利用Nginx缓存降低CPU负载,针对性配置即可避免请求全量落到后端:
- 静态资源直接缓存:让Nginx直接处理CSS/JS/图片等静态资源,无需转发到Apache
- 缓存已做Redis HTML缓存的页面:对首页这类静态化页面,让Nginx直接缓存结果,跳过后端处理
示例Nginx配置片段:
# 缓存静态资源,有效期30天 location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg)$ { expires 30d; add_header Cache-Control "public, immutable"; root /path/to/laravel/public; # 直接指向Laravel静态资源目录,无需走Apache } # 缓存首页HTML(路由为/) location = / { proxy_cache laravel_page_cache; proxy_cache_valid 200 10m; # 缓存时长可匹配你的Redis缓存时效 proxy_cache_key "$host$request_uri"; proxy_pass http://your_apache_backend; # 替换为你的Apache后端地址 }
二、调整Apache与PHP-FPM的资源配置
- Apache模式优化:将Apache从prefork模式改为event模式,减少进程开销,同时调整进程数:
- 编辑
httpd.conf,设置StartServers=2、MinSpareServers=2、MaxSpareServers=4,避免闲置进程占用资源
- 编辑
- PHP-FPM进程数适配:12核服务器建议配置:
避免进程过多抢占CPU资源pm.max_children = 24 pm.start_servers = 6 pm.min_spare_servers = 4 pm.max_spare_servers = 8
三、Laravel自身性能优化
- 关闭调试模式与冗余日志:
.env中设置APP_DEBUG=false,调试模式会生成大量堆栈信息,严重消耗CPUconfig/logging.php中将日志级别改为error,减少不必要的日志写入
- 开启核心缓存:
- 运行
php artisan route:cache,缓存路由规则,减少每次请求的路由解析开销 - 运行
php artisan config:cache,缓存配置文件,避免重复加载
- 运行
- 升级PHP与启用OPcache:
- Laravel 9建议使用PHP 8.0+,CentOS 7可通过第三方源升级到PHP 8.1/8.2,性能提升显著
- 配置OPcache扩展,加速PHP代码执行:
opcache.enable=1 opcache.enable_cli=1 opcache.memory_consumption=256 opcache.max_accelerated_files=10000 opcache.revalidate_freq=60 opcache.save_comments=0
四、其他排查方向
- 用
htop查看具体占用CPU的进程:区分是Nginx、Apache还是PHP-FPM,针对性优化 - 临时关闭Plesk的ModSecurity模块,部分严格的安全规则会导致CPU飙升
- 检查Plesk后台是否有自动备份、系统更新等任务在运行,抢占资源
内容的提问来源于stack exchange,提问作者Łukasz
相关产品推荐
相关产品推荐

