美文网首页
记一次线上CPU高问题排查

记一次线上CPU高问题排查

作者: woniu95 | 来源:发表于2019-01-05 23:39 被阅读0次

    最近线上经常出现CPU比较高的情况,这里记录下如何定位问题。

    先使用top命令查看那个进程占的CPU较高,这里可以看到,pid为:6381的Java进程占用了262%的CPU,之所以是262%是因为机器是4核的,400%是满CPU。

    image

    知道pid后就可以使用ps -mp pid -o THREAD,tid,time命令显示进程下的线程列表。如下图所示:

    image

    这里可以看到有4个线程长时间占用较高的CPU,我们拿到一个tid,转为16进制:

    image

    最后使用jstack命令打印线程的堆栈信息,命令为:jstack pid |grep tid -C 30

    image

    这里可以看到是由于GC导致的CPU占用较高,那么我们使用jstat -gcutil pid 1000 20命令来打印Java进程的GC情况,如下图所示:

    image

    这里可以看到FGC的次数和时间不是很正常,为什么会导致频繁的FGC呢?

    在程序中,如果有未关闭的资源,导致GC回收不了,一直占用着内存,就会导致频繁的FGC。而在我这里是由于httpclient未关闭导致一直占用内存,从而导致GC。所以在平时写代码的过程中,一定要记得及时的关闭资源。

    相关文章

      网友评论

          本文标题:记一次线上CPU高问题排查

          本文链接:https://www.haomeiwen.com/subject/dnrjrqtx.html