JAVA服务线上排查问题流程-创新互联

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 地址空间不够

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享名称:JAVA服务线上排查问题流程-创新互联
文章地址:http://azwzsj.com/article/cspoii.html