[alibaba/arthas]非主流架构可以通过源码构建使用arthas吗

2024-07-17 945 views
1
环境信息

国产平台

  • arthas-boot.jar 或者 as.sh 的版本: 3.6.4
  • Arthas 版本: 3.6.4
  • 操作系统版本: Linux 4.19.180-1.9.alios7h.XXX
  • 目标进程的JVM版本: 1.8.0_212
重现问题的步骤
  1. 拉取arthas源码,切换至3.6.4分支,mvn clean package -DskipTests
  2. 出包使用构建的arthas,java -jar 启动
  3. 后使用vmtool --action getInstances --className com.XXX,报错
期望的结果

输出类的对象,请问非arthas原生支持的平台能否通过源码构建的方式打出支持arthas全部命令的包?如果可以的话,正确的构建步骤是什么?

实际运行的结果
vmtool error: /tmp/ArthasJniLibrary4065471480531845950.tmp: /tmp/ArthasJniLibrary4065471480531845950.tmp: cannot open shared object file: No such file or directory (Possible cause: can't loadAMD 64-bit .so on a XXX-bit platform)

回答

5

问题已解决,构建步骤参考:https://github.com/alibaba/arthas/issues/1918#issuecomment-924933144

目前arthas已对arm进行支持,我所使用的架构仍然不行,在进行完构建步骤后,仍需对源码common/src/main/java/com/taobao/arthas/common/OSUtils.java, common/src/main/java/com/taobao/arthas/common/VmToolUtils.java 进行部分调整如下: OSUtils:

  1. normalizeArch方法中添加对当前架构的if判断
  2. 增加对自身架构的is判断方法 VmToolUtils: static代码块中增加对当前架构的判断条件

我理解作者当前暂时并没有适配除x86与arm以外的架构,但是是否可以考虑将这些部分的控制逻辑稍微放开,以便其他架构至少可以通过源码构建的方式获得完整功能的arthas。即使相关c/c++的代码需要调整,也可以将适配工作下放至用户。因为发现这些调整也花费了我部分时间,希望其他朋友可以绕过这段弯路。

3

@497010477 欢迎提交PR,这个不是不开放,开发者手上没有其它架构的机器,也没有这个需求,所以只支持了x86与arm 。

9

PR就是一种开放形式 ? @497010477

8

哈哈哈,谢谢,我知道PR是什么,我的表达方式只是因为我着急用所以写的关于当前架构的一些hack, 但是有一定的保密要求所以代码不方便贴出也不方便提交,前两天比较忙,最近我会抽空调整通用型然后提交PR?