JAVA服务线上排查问题流程
创始人
2024-05-01 14:22:55
0

CPU占用过高排查流程

   1:利用top命令可以查出占CPU最高的进程pid,如pid为9876

   2:查看该进程下占用最高的线程id   top -Hp 9876

   3:如占用率最高的线程ID为9876,将其转换为16进制式(因java native线程16进制形式输出) printf '%x\n' 6900

   4:利用jstack打印出java线程调用栈信息 jstack 9876 | grep '0x1af4' -A 50 --color  定位问题

内存占用过高排查流程

    1:查找进程id: top -d 2 -c

    2:查看JVM堆内存分配情况:jmap -heap pid

    3:查看占用内存比较多的对象:jmap -histo pid | head -n 100

    4:查看占用内存比较多的存活对象:jmap -histo:live pid | head -n 100

什么情况下,会抛出OOM

    1:JVM98%的时间都花费在内存回收

    2:每次回收的内存小于2%

满足这两个条件将触发OutOfMemoryException,这将会留给系统一个微笑的间隙以做一些Down之前的操作,如手动打印Heap  Dumo。并不是内存被耗空的时候才抛出

系统OOM之前的现象

     1:每次垃圾回收的时间越来越长,由之前的10ms延长到50ms左右,FullGC的时间也有之前的0.5s延长到4、5s

     2:FullGC的次数越来越多,最频繁时隔不到1分钟就进行一次FullGC

     3:老年代的内存越来越大并且每次FullGC后,老年代只有少量的内存被释放掉

如何进行Dump文件分析

     通过指定启动参数-XX:+HeapDumpOnOutOfMemeoryError -XX:HeapDumpPath=/usr/app/data/dump/heapdump.hpro 在发生OOM时自动导出Dump文件

GC日志分析

     为了方便分析GC日志信息,可以指定启动参数 -Xloggc: app-gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStemps 方便详细查看GC日志信息

     1:使用 jinfo pid 查看当前jvm相关参数

     2:使用 jstat -gcutil pid 1s 10  查看10s内当前堆的占用情况

     3:使用 jmap -heap pid 查看当前JVM堆的情况

     4:使用jmap -F histo pid | head -n 20 ,查看前20行打印,即查看当前top20的大对象,一般从这里可以发现一些异常的大对象,如没有可继续排查前50的大对象分析

     5:最后使用 jmap -F -dump:file=a.bin pid  如dump文件很大可以压缩一下tar -czvf a.tar.gz a.bin

     6:对dump文件分析,使用MAT分析内存泄漏

线上死锁排查

     1:jps 查找java服务进程

     2:执行jstack -F pid

     3:可使用远程连接,jconsole、jvisualvm

线上YGC耗时过程优化

     1:如生命周期过长的对象越来越多(比如全局变量或者静态变量等),会导致标注和复制过程的耗时增加

     2:对存活对象标注时间过长:比如重载了Object类的Finalize方法,导致标注Final Reference耗时过长;或者String.intern方法使用不当,导致YGC扫描StringTable时间过长。可通过以下参数显示GC处理Reference的耗时-XX:+PrintReferenceGC

     3:长周期对象积累过的:如本地缓存使用不当,积累太多存活对象;或者锁竞争严重导致线程阻塞,局部变量的生命周期变长

内存溢出的原因及排查线上went

1:java.lang.OutOfMemoryError: java heap space      堆栈溢出,代码问题可能性极大

2:java.lang.OutOfMemoryError:GC ouve head limit exceeded 系统处于高频的GC状态,且回收的效果依然不佳的情况会开始报这个错误,这种情况一般是产生了很多不可以释放的对象,有可能是使用不当导致,或申请大对象导致,但java heap space的内存溢出有能提前不会报这个错误,可能内存就直接不够导致的,而不是高频GC

3:java.lang.OutOfMemoryError:PermGen space  jdk1.7才会出现的问题,原因是系统的代码非常多或引用的第三方包非常多,或代码中使用了大量的常量,或通过intern注入常量,或通过动态代码加载等方法,导致常量池的膨胀

4:java.lang.OutOfMemoryError:Direct buffer memory 直接内存不足,因jvm垃圾回收不会回收掉直接内存,可能原因是直接或间接使用了ByteBuffer中的allocateDirect方法,而没有做clear

5:java.lang.StackOverflowError -Xss设置过小

6:java.lang.OutOfMemoryError:unable to create new native thread 堆外内存不足,无法为线程分配内存区域

7:java.lang.OutOfMemorryError:request {} byte for {}  out of swap 地址空间不够

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...