【Java】Arthas工具安装

最近遇到一个问题,偶现了两三次了,想要定位却无从下手!
为什么呢?主要是因为我们使用的openjdk基础镜像真的是太精简了,自带的jstack这些工具都没有!

本人也是这方面经验的小白,之前没有定位过这类多线程产生的问题。唯一的方向就是使用jstack工具,最初以为这个工具可以通过yum方式安装,百度后发现jstack是jdk自带的工具,这下子想基于现有openjdk镜像搞个带jstack的新镜像就没有那么简单了。(虽然可以下载个最新的openjdk镜像使用,肯定带jstack,但是由于有四百多兆,肯定不会让用的。)

我就问了下隔壁组的同事,在这种艰难的条件下,平时他们是怎么定位jvm问题的,他就提了一嘴Arthas。我就研究了下。发现这个工具是可以下载了拷贝到pod里面来使用的。Arthas官方下载链接

唯一庆幸的是,公司的基础镜像里面还保留着unzip工具,至少可以在pod里面将Arthas工具包解压了。

接下来进入正文。

工具准备:
arthas-packaging-3.4.8-bin.zip (官方下载的Arthas工具包)
tools.jar (linux安装的java目录lib下的jar包)

步骤:
1、拷贝arthas工具包到pod里面。
【命令】kubectl get pod |grep xx (查看pod)
【命令】kubectl cp arthas-packaging-3.4.8-bin.zip xxx:/mnt(pod名称:pod内目录)

2、进入pod的/mnt目录,解压arthas工具包。
【命令】kubectl exec -it xxx(pod名) sh
【命令】unzip arthas-packaging-3.4.8-bin.zip

3、启动arthas。
【命令】java -jar arthas-boot.jar

提示:
Can not find java process.
Try to pass in command line.Please select an available pid.

也就是说,工具自己没有找到java进程,需要自己输一个要看的java进程。
所以就需要通过top命令查看pid。

4、查看java进程,找到pid
【命令】top

5、指定pid启动arthas,增加个pid参数就行了。这个pid不能是LinuxTheads manager thread.
【命令】java -jar arthas-boot.jar 6 (6是一个pid)

异常:
Can not find tools.jar under java home: /usr/lib/jvm/java-1.8-openjdk/jre

这就是过于精简的jdk的坏处了,缺东西呀!需要找个linux下java的tools.jar拷贝到pod里java的lib目录下(lib目录可以根据异常提示里面的那个路径在pod里找)。拷贝命令还是kubectl cp。

6、tools.jar拷贝进pod的/usr/lib/jvm/java-1.8-openjdk/jre/lib后,再次指定pid启动arthas。
哒哒,成功了。

可以通过【命令】thread --all 查看所有进程,比不带参的thead命令查看的更多,线程池的线程都是带–all之后才查到的。

具体的使用可以参考官方文档

参考文章:java要频繁调用容器时_Arthas排查Kubernetes中的应用频繁挂掉重启问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值