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元起,快前往官网查看详情吧