线上故障主要会包括cpu、磁盘、内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍。

CPU

CPU异常往往还是比较好定位的。原因包括业务逻辑问题(死循环)、频繁gc以及上下文切换过多。而最常见的往往是业务逻辑(或者框架逻辑)导致的,可以使用jstack来分析对应的堆栈情况。

使用jstack分析cpu问题

在线上环境可以使用jps命令查看运行中的Java程序的进程id,然后使用命令top -H -p pid查看该进程占用率高的线程。

然后将暂用最高的pid转成16进制的nid(本机线程id)printf '%x\n' pid

使用jstack命令找到堆栈信息,jstack pid |grep nid -C5

这样就能找到问题代码。

频繁gc问题

使用命令jstat -gc pid 1000查看gc分代的变化情况,

磁盘

内存

网络