记录与学习完备的线上故障排查路线及方案

Trouble分类

线上故障会有哪几类?

  • 内存:大多数应用都会对内存影响巨大,很容易造成内存泄露
  • CPU:计算资源吃紧,框架或者开发工具包中一般某种隐藏的逻辑触发了一些死循环或者应用业务逻辑引发的死循环逻辑吃紧了CPU
  • 磁盘:产生大量无用文件,或者DOcker应用单元伸缩吃紧磁盘资源等
  • 网络:基础建设层(服务器)某些原因断开网络或者应用层面某些逻辑Bug导致问题

工具篇

Linux工具

Linux工具链接

内存篇

Java应用一般jvm_option:-XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:+AlwaysPreTouch -XX:ReservedCodeCacheSize=128m -XX:InitialCodeCacheSize=128m, -Xss512k -Xmx4g -Xms4g,-XX:+UseG1GC -XX:G1HeapRegionSize=4M

如果遇到频繁报出Swap区域使用量过高的异常

  • 在项目中添加-XX:NativeMemoryTracking=detailJVM参数重启项目
  • 使用jcmd pid VM.native_memory detail命令查看内存分布情况
    • jcmd命令显示的内存包含堆内内存、Code区域、通过unsafe.allocateMemoryDirectByteBuffer申请的内存,但是不包含其他Native Code(C代码)申请的堆外内存

磁盘篇

网络篇

CPU篇

附录