cpu占用率过高问题排查

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u012822070/article/details/83038846

背景介绍:项目war包发布到测试环境后,刚开始运行正常,过了一段时间所有查询都报504错误。登陆测试服务器查看日志,发现查询一直在报获取不到数据库连接的错误(数据库连接池用的是druid)。把配置文件下载到本地,本地代码正常运行,应该不是数据源配置的问题。楼主于是用了重启大法,重启后所有请求都正常了。但是接着发现一个很严重的问题,就是项目启动的时候cup占用率就到了100%,接着就开始了cpu占用率过高问题的排查…………不过我有个疑问:cup占用率过高会导致获取不到数据库连接吗?等待大神解答

问题排查步骤如下:

  1. ps -ef| grep 命令查看进程pid;

  2. top -p pid命令查看进程cpu占用情况;
    在这里插入图片描述

  3. top -p pid -H命令查看进程里的线程占用cpu情况,发现id为162535的线程占用了所有的cpu资源;
    在这里插入图片描述

  4. printf %x\n命令 将十进制表示的线程id转为16进制,或者百度一下十进制转十六进制;
    在这里插入图片描述

  5. jstack 进程pid | grep 线程pid命令可以定位到具体java类;
    在这里插入图片描述
    6.发现项目启动的时候会启动kafka监听线程,该线程里面有while循环但是没有加sleep,导致cpu占用率过高,后面加上了sleep方法就好了。
    在这里插入图片描述

展开阅读全文

没有更多推荐了,返回首页