美文网首页
机器CPU高,top又看不出来是哪个进程

机器CPU高,top又看不出来是哪个进程

作者: e20d9310ced3 | 来源:发表于2019-07-23 19:53 被阅读0次

    (补充说明:其实top看不出来是哪个进程,是因为自己水平菜,用top -H或者top进去后,输入H就可以根据线程来查看,这样就能发现cpu占用高的线程了)

    今天发现一台机器cpu跑高了,第一时间用top查看


    top.png

    并没有发现占用cpu高的进程,但是cpu使用的确很高。

    使用另外一个命令htop


    htop.png

    使用htop发现是一个pid为32442的进程占用了100%的cpu,按后面的运行参数,并根据自身的业务,可以判断这是一个业务进程的其中一个线程。

    使用ps命令查看业务进程pid,查出来是31519

    先计算线程的16进制的值

    printf "%x\n" 32442
    7eba
    

    然后用jstack pid将堆栈信息打印出来
    jstack 31519 | grep 74ba -B 15 -A 15

    堆栈信息打印出来后,就交给开发来处理了。

    注:
    使用jstack的时候报了个错,
    Unable to open socket file: target process not responding or HotSpot VM not loaded
    原因如下:
    jvm运行时会生成一个目录hsperfdata_$USER($USER是启动java进程的用户),在linux中默认是/tmp,目录下会有些pid文件,存放jvm进程信息,而jmap,jstack等工具会读取/tmp/hsperfdata_$USER下的pid文件获取连接信息。所以需要运行这个jvm的用户来执行jstack命令
    我这边使用tomcat用户来运行的,所以需要切换到tomcat用户来执行jstack即可

    相关文章

      网友评论

          本文标题:机器CPU高,top又看不出来是哪个进程

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