我所理解的Arthas

安装过程省略,网络上有很多。这里不再copy,以下环境为win10 --jdk 1.8 --Arthas 3.0.5

遇到的问题

[ERROR] Target process 17272 is not the process using port 3658, you will connect to an unexpected process. [ERROR] If you still want to attach target process 17272, Try to set a different telnet port by using --telnet-port argument. [ERROR] Or try to shutdown the process 13400 using the telnet port first.

    提示这个的原因是错误使用了 exit退出,之前打开过进程[3] 端口仍被占用。如果客户端无操5分钟,session过期后,再次登入选择其它进程也会提示上述错误。类似quit。正确退出命令为:shutdown。

使用:http://localhost:8563/ 可以通过web访问Arthas (客户端)

与退出有关命令有:

  • quit——退出当前 Arthas 客户端,其他 Arthas 客户端不受影响
  • shutdown——关闭 Arthas 服务端,所有 Arthas 客户端全部退出

    如上图可见我本地启动了两个进程[3]、 [4] 两个springboot 项目。接下来带大家串一下通过Atrhas的命令,我们能得到什么样的有用信息以及能给我们提供哪些判断依据。

    这里先抛出一个问题,就是你为什么要使用arthas,或许是遇到了线上难以定位的问题,又或者其它。带着问题是看,总是能收获一个成串的知识链。

问题一:这个类从哪个 jar 包加载的?

$ sc

    “Search-Class” 的简写,这个命令能搜索出所有已经加载到 JVM 中的 Class 信息. 对于不熟悉的命令在后面添加-h往往能得到更多有用的信息。 贴图仅此一次,后续类似命令不再赘述。

  • 模糊匹配

    比如命令:sc com.sun.proxy.* 可以将全类名前匹配的类搜索出来。

  • 类详细信息

    -d 表示: detail

    通过code-source能够得到这个类具体是由哪个jar包加载的。这个在处理 钻石依赖情况,通常可以用到。

问题二:我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?

$ jad

    使用过eclipse 安装反编译插件包的童鞋们可能更了解,一下就能记住这个命令。 官方实例:

反编译出来的源码高亮展示,更方便定位代码是不是正确的分支,自己代码有没有提交。

问题二:遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?

问题三:某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!

问题四:是否有一个全局视角来查看系统的运行状况?

$ dashboard

统的实时数据面板,请移步阅读官方文档。

  • 主要活跃线程列表
  • jvm内存各区域使用情况以及GC信息
  • 运行环境

问题五:有什么办法可以监控到JVM的实时运行状态?

猜你喜欢

转载自juejin.im/post/5c510303518825242165f29c