[alibaba/arthas]增加对 classloader.toString() 结果的匹配

2022-09-09 243 views
2

有些情况, classloader 可能有很多实例,它们之后的区别只是 toString()函数返回结果不同。

为了能准确匹配到这个 classloader,不用每次都 -c 来指定 hashcode,考虑增加对 classloader.toString() 结果的匹配。

这样子,像sc, classloader等命令都能直达结果。

回答

6

同样需要该功能

9

可能没太理解您的意思。为了省去查hashcode的步骤,比如增加一个参数-ts,输入sc -ts {classloader name} {xxx},能查找出该classloader各个实例加载的符合{xxx}的类。 是要实现这种效果吗?@hengyunabc

1

@pandaapo

比如有一个 HelloClassLoader ,然后应用 new 了两个实例。

这样子,在搜索 sc --classLoaderClass HelloClassLoader 时,会返回

Found more than one classloader by class name, please specify classloader with '-c <classloader hash>'

因为 sc 是只匹配到一个 ClassLoader 时,才会正常工作。所以提示信息让用户用 -c 去指定 classloader hash 。


现在有的 ClassLoader.toString() 会返回不同的内容。比如 HelloClassLoader 重写了 toString() 函数,它会返回比如:

tom's HelloClassLoader
kit`s HelloClassLoader

那么我们可以增加一个参数,比如叫 --classLoaderStr

sc --classLoaderStr `tom's HelloClassLoader`  ClassA

这样子直接能返回 tom 这个 HelloClassLoader 实例里的结果。

4

我的需求场景可能略微有点不同。 在我的需求场景下,会创建同一个 classloader 类的多个实例,每个不同的 classloader 实例都会加载不同的类。在这种场景下需要 @hengyunabc 提到的这个描述。

这个是一个例子 有同一个classloader 类的多个classloader 实例。 image 如果需要查找该 classloader 类所加载的类,需要每个去指定 hash,较为繁琐。 image