使用Arthas做线上诊断

发布时间 2023-04-12 19:41:06作者: za-ill-ds

问题场景,

程序中有个静态变量定义如下:

class A{

private ConcurrentHashMap<String, String> paramsMap = GenIssuePackageOpr.getParamsMap();

}

现在需要不停机情况下直接改写字段 paramsMap 的值,

服务器通过tomcat直接部署的,将arthas包放到服务器上,

执行下面命令启动:java -jar arthas-boot.jar

提示:* [1]: 30348 org.apache.catalina.startup.Bootstrap

输入1然后回车

在这个spring项目中有

public class ApplicationContextUtils {
public static ApplicationContext applicationContext;
}
所以可以使用getstatic工具取到变量,查看里面的值,所以执行以下命令:

getstatic com.tcnp.common.utils.ApplicationContextUtils applicationContext 'getBean("iterationIssues").paramsMap'

千万注意bean名首字母小写

输出略

,可以移除里面的元素了

getstatic com.tcnp.common.utils.ApplicationContextUtils applicationContext 'getBean("iterationIssues").paramsMap.remove("000")'

完成