Linux中Java异常排查的常用命令

Linux中Java异常排查的常用命令

每个人都希望自己的代码是0Bug,上线后一直平稳,也不会出现任何问题,但是事与愿违,当我们的代码部署上线,可能会因为代码Bug,或者其他甚至表面上看起来显得莫名其妙的原因而爆出异常问题。为了搞清楚这些问题的原因并解决掉,我们需要借助一些工具、手段去分期现象背后的起因。由于年纪比较大,记性是越来越不行,故有此记。

日志排查

 当我们接到业务反馈某个业务在某种情况下无法操作时,这时候,一般是查询日志,关于查询日志,如果是多实例部署时,那么日志集中存储则显得尤为重要了。针对K8S的多实例服务,我们则收集到ES中集中存储。那种非K8S部署的服务,我们则直接存在宿主机中,这时候,我们可以直接使用tail -f 日志文件来查看,如果日志文件较小,我们可以用vim来进行关键字查询,如:

1
vim catalina.out

进入文件编辑模式后,输入/+关键字即可查找,比如,我们需要查找20220803000081817这个关键字:

1
/20220803000081817


然后回车

可以看到,关键显示高亮,我们可以使用n键查找下一个关键字,使用shift+n查找上一个关键字。

 除了使用vim外,我们还可以使用grep来查找关键字,格式为grep -C 行数 关键字 文件

1
grep '20220803000081817' -C 2 catalina.out

grep-A-B-C三个参数:

  • -A 显示匹配指定内容及之后的n行
  • -B 显示匹配指定内容及之前的n行
  • -C 显示匹配指定内容及其前后各n行

 有些日志没有做日志分割,一天会生成10G+大小的文件,这种在我们查询时会比较麻烦,不可能吧10G+的文件全部加载到内存中来查找。我们可以借助sed命令来导出指定时间段日志内容,前提是,日志文件的时间格式要标准。这里我们想要导出2022-08-03 12:002022-08-03 13:00的日志,语句如下:

1
sed -n "/2022-08-03 12:00/,/2022-08-03 13:00/p" catalina.out > 0803.txt

最终会把指定时间段的日志写入到0803.txt这个文件中,日志便小了许多。

Linux查看Java线程运行情况

1.先用top命令,或者ps -ef|grep 关键字来查找PID

2.top -Hp <pid>来查看进程内的线程资源使用情况

3.printf "%xn" <线程ID>来转换成16进制,
为什么要转16进制呢?我们来看看jstack

我们可以看到线程Id是16进制,所以需要转为16进制,才能方便后面jstack <pid> | grep <tid> 来定位到具体的线程。

jstat -gcutil查看JVM运行情况

S0:幸存1区当前使用比例
S1:幸存2区当前使用比例
E:伊甸园区使用比例
O:老年代使用比例
M:元数据区使用比例
CCS:压缩使用比例
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间

Linux中Java异常排查的常用命令

https://blogs.52fx.biz/posts/4218581835.html

作者

eyiadmin

发布于

2022-08-04

更新于

2024-05-31

许可协议

评论