转载

我所理解的Arthas

我所理解的Arthas
[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,或许是遇到了线上难以定位的问题,又或者其它。带着问题是看,总是能收获一个成串的知识链。

我所理解的Arthas

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

$ sc

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

我所理解的Arthas
  • 模糊匹配

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

-d 表示: detail

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

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

原文  https://juejin.im/post/5c510303518825242165f29c
正文到此结束
Loading...