Linux定位服务器CPU负载100%居高不下的问题

最近,Linux服务器上总是经常会出现几个CPU利用率达到100%并且一直高居不下,如下图所示,再Linux上,输入 top 命令,然后再按一下 1,就会显示你服务器逻辑CPU的数量以及现在服务器CPU各个参数,这些参数的详细信息我这里就不再多讲了,从下面的图中可以看出,有四个CPU的使用率达到了100%,很明显的,程序有问题

明显的,从 top 命令很轻易的可以看出,占据CPU不放的是Java进程,该进程的PID是19825

命令查看这个进程下面的所有线程占用情况ps mp pid -o THREAD,tid ,也可以通过 top -H -p pid 找到导致cpu高的线程 

  

这两个命令查找的结果是一样的,都找到了这四个导致CPU居高不下的PID,1482,27308,28575,和4466而后,使用JVM自带的jstack命令导出当前所有线程的运行情况和线程当前状态,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题,jstack 19825 > error.log

可以把该文件下载到本地或者直接在Linux上分析,首先,需要把刚才的四个PID 1482,27308,28575,和4466分别转换为16进制,在Window上可以使用计算器转换,在Linux上一般预装Python,可以命令行键入 Python,然后 print hex(num)直接转换为16进制:

通过该16进制可以在上面导出的JVM信息中方便的定位到该线程的位置:

从导出的JVM日志文件中分别找到了4个PID对应的线程位置,发现四个线程的状态都处于RUNNABLE下,RUNNABLE表示该线程正在执行,但这里明显是无法停止,我又重新导了几次JVM的状态日志,发现这4个线程总是处于RUNNABLE状态下。

从上图Java的调用关系看,也可以从 com.sun.jna.Function.invoke()方法看出,该线程使用JNA调用了本地的DLL类库出现了问题,该DLL是第三方库,所以要从该DLL入手。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值