JVM之arthas在线排查工具
- 启动arthas
- 总结几个常用的命令
- 1.jvm命令:
- 2.thread命令:
- 3. dashboard命令:
- 4.heapdump 命令
- 5.jad命令:
- 6.redefine命令:
- 7.SC命令:
启动arthas
arthas的github地址:https://github.com/alibaba/arthas arthas官方文档:https://alibaba.github.io/arthas/index.html
点开github上arthas的中文文档
按照文档的步骤一步一步下载就好了,下载之后方法到linux上,并且解压得到
启动一个java文件,这个java文件自己随便写一个模拟死循环就行了
回到arthas目录,输入java -jar arthas-boot.jar 启动arthas
总结几个常用的命令
1.jvm命令:
JVM命令可以查看当前JVM的一些基本参数,包括JDK版本,内存状况,启动参数等。。。
2.thread命令:
类似于jstack,可以查看线程的状况,包括线程id,线程名称,线程状态,cpu使用情况。使用 thread + threadId可以查看执行线程的详情
3. dashboard命令:
总体查看系统的一些信息,包括线程,内存,以及OS的信息。
4.heapdump 命令
导出heap文件,需要注意的是导出的文件,后缀名必须是.hprof。
我们有jhat命令来分析这个文件:
访问7000端口
拉取到网页的最下端
这里跟在线分析jmap差不多。
需要注意的是,如果项目上线了,最好不要在线程导出dump文件,由于堆太大的一些原因,可能会导致整个系统长时间的瘫痪无法运行。除了jhat命令,我们还可以把hprof文件下载到本地,利用JDK自带的jvisualvm图形界面来分析hprof文件
定位问题
5.jad命令:
可以把指定的类进行反编译。 动态代理生成类的问题定位 第三方的类(观察代码) 版本问题(确定自己最新提交的版本是不是被使用)
6.redefine命令:
用于在已经上线,不方便停止运行的情况下,修改小型bug,热替换。
热替换 目前有些限制条件:只能改方法实现(方法已经运行完成),不能改方法名, 不能改属性 m() -> mm()
7.SC命令:
“Search-Class” 的简写,这个命令能搜索出所有已经加载到 JVM 中的 Class 信息
更详细的介绍,还是需要看官方的文档,这里只是简单的应用。