zoukankan      html  css  js  c++  java
  • 如何排查java进程cpu100%的问题

    cpu是时分(time division)的,操作系统里有很多线程,每个线程的运行时间由cpu决定,cpu会分给每个线程一个时间片,时间片是一个很短的时间长度,如果在时间片内,线程一直占有,则是100%;我们应该意识到,cpu运行速度很快(主频非常高),除非密集型耗费cpu的运算,其它类型任务都会在小于时间片的时间内结束。

    产生CPU100%的原因:

    某一程序一直占用CPU是导致CPU100%的原因,大概有以下几种情况:

    1、Java 内存不够或溢出导致GC overhead问题, GC overhead 导致的CPU 100%问题;

    2、死循环问题. 如常见的HashMap被多个线程并发使用导致的死循环, 或者死循环;

    3、某些操作一直占用CPU

    第一步:使用top命令,查看占用cpu的进程

    [root@sdfsdfseZ codeimage]# top
    原创:如何排查java进程cpu100%的问题

    第二步:ps -ef | grep java 或jps命令,找出服务器的所有java进程

    原创:如何排查java进程cpu100%的问题

    第三步:找出CPU耗用最厉害的进程pid

    原创:如何排查java进程cpu100%的问题

    第四步:查找出具体占用cpu利用率最厉害的线程号,top -H -p pid 。然后按下shift+p,跳出CPU监控

    当前线程号为:1747

    原创:如何排查java进程cpu100%的问题

    第五步:将获取到的线程号转换成16进制

    因为java线程栈文件中的线程id是十六进制,需要将线程id从十进制转为十六进制。十进制 转十六进制的命令如下:

    结果为:

    原创:如何排查java进程cpu100%的问题

    第六步:导出线程栈

    将具体的占用CPU过高的java进程的线程栈导出,导出命令如下:

    pid.tdump文件后缀名随意,通常以tdump结尾。

    [root@sdfsdfsdeZ codeimage]# jstack 1747 > tmp/1747.tdump
    原创:如何排查java进程cpu100%的问题

    可能会抛出异常;

    1747: Unable to open socket file: target process not responding or HotSpot VM not loaded
    The -F option can be used when the target process is not responding

    原因分析

    jvm运行时会生成一个目录hsperfdata_$USER($USER是启动java进程的用户),在linux中默认是/tmp,目录下会有些pid文件,存放jvm进程信息,而jmap,jstack等工具会读取/tmp/hsperfdata_$USER下的pid文件获取连接信息.

    检查了/tmp/hsperfdata_root目,,但在$TOMCAT_HOME目录中的temp目录中有对应的文件.

    解决办法

    或使用

    [root@iZ2zeab8t820b5ywp0rkfeZ bin]# jstack 1706 > /tmp/hsperfdata_root/1706.tdump

    第七步:导出堆

    [root@sddsdfsaZ bin]# jstat -gcutil 1706

    原创:如何排查java进程cpu100%的问题

    第八步:jvisualvm分析快照

    使用JAVA_HOME/bin/jvisualvm.exe,载入快照

    文件----->载入—>文件类型(Dump)

    原创:如何排查java进程cpu100%的问题
    原创:如何排查java进程cpu100%的问题
  • 相关阅读:
    新手学逆向,调试abexcm1过程
    (原创)渗透某国工业系统
    (原创)对某国的一次渗透
    汇编笔记 RETF
    汇编笔记 CALL(1)
    汇编笔记 RET
    大小写转换
    JDK下载太慢?让国内镜像帮助你
    Win7,docker安装后,创建虚拟机分配不了ip错误 err: exit status 255
    Spring事务传播实践与Spring“事务失效”
  • 原文地址:https://www.cnblogs.com/winson-317/p/12684942.html
Copyright © 2011-2022 走看看