Nginx占用CPU和内存过高怎么办?杀进程后自动重启如何解决?
Nginx高资源占用+杀进程自动重启问题解决方案
停止自动重启
直接执行kill -9终止进程只会被守护进程重新拉起,首先根据Nginx的托管方式执行对应停止操作:
- 若为systemd托管(绝大多数Linux发行版默认部署方式):
执行systemctl stop nginx即可彻底停止服务,如需禁用开机自启可额外执行systemctl disable nginx - 若为supervisor托管:
执行supervisorctl stop nginx停止实例 - 若为Docker容器部署:
执行docker ps | grep nginx找到对应容器ID后,执行docker stop <容器ID>停止
排查高CPU/内存占用原因
- 首先校验Nginx配置合法性,执行
nginx -t,如果返回配置错误,先修正对应配置项后再重启服务 - 排查日志定位异常请求:
访问日志默认路径为/var/log/nginx/access.log,错误日志默认路径为/var/log/nginx/error.log,重点排查是否有大量高频恶意请求、某类接口请求耗时异常的情况 - 校验核心配置参数:
打开Nginx主配置文件/etc/nginx/nginx.conf,检查worker_processes参数,建议配置为服务器CPU核心数即可,不要设置过大;worker_connections参数建议根据服务器承载能力设置,不要超过系统最大文件打开数限制 - 排查扩展逻辑异常:
如果配置了大量rewrite规则、lua动态处理脚本、反向代理到异常上游服务,逐一校验逻辑是否存在死循环、内存泄露、上游无响应导致请求堆积的问题
修复后验证
所有问题修复完成后,先执行nginx -t确认配置合法,再启动Nginx服务,执行top -p $(pidof nginx)查看进程资源占用,确认恢复正常即可。
内容的提问来源于stack exchange,提问作者Nguyen Hung
相关产品推荐
相关产品推荐

