GitLab出现502错误未知Java进程占满CPU 如何查找进程来源并终止
未知Java进程占满CPU导致GitLab 502的解决步骤
1. 定位进程归属与自启动来源
- 先获取异常Java进程的PID:执行
top命令找到CPU占用100%的Java进程ID,记为$PID - 查看父进程信息:执行
ps -o ppid= $PID,如果父进程ID为1,说明是由系统守护进程托管 - 直接查询进程对应的服务:执行
systemctl status $PID,可直接输出该进程关联的systemd服务名称
2. 禁用自启动机制
按优先级排查以下常见的进程托管方式,找到后禁用对应规则:
- systemd服务:如果上一步查到了服务名,执行
systemctl stop <服务名> && systemctl disable <服务名>停止服务并关闭自启 - supervisor等第三方守护进程:检查
/etc/supervisord.d/目录下的所有配置文件,找到关联tomcat的配置项删除后,执行supervisorctl update生效 - 定时任务:分别检查
/etc/crontab、/var/spool/cron/目录下所有用户的定时任务,删除所有自动拉起tomcat的规则 - 开机启动脚本:检查
/etc/rc.local、/etc/rc.d/rc.local文件,删除其中启动tomcat的相关命令
3. 彻底清理残留
从进程启动命令可知,该应用是部署在/data/apache-tomcat/的tomcat程序,Java环境安装在/usr/java/latest/:
- 先强制终止当前运行的进程:
kill -9 $PID
注意:执行删除操作前请确认目录无需要保留的业务数据 - 删除tomcat程序目录:
rm -rf /data/apache-tomcat/ - 删除未知来源的Java环境:
rm -rf /usr/java/ - 完成操作后可重启服务器验证进程是否会再次自动拉起
该进程大概率是之前gitlab-runner执行CI/CD任务时启动的服务,未配置任务结束自动回收,导致进程脱离runner管控驻留在系统中,后续可以给CI任务增加执行完自动清理衍生进程的规则避免同类问题。
内容的提问来源于stack exchange,提问作者Ali Malek
相关产品推荐
相关产品推荐

