使用Arthas做线上诊断
问题场景,
程序中有个静态变量定义如下:
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("a").paramsMap'
千万注意bean名首字母小写,类名A小写之后是a
输出略
,可以移除里面的元素了
getstatic com.tcnp.common.utils.ApplicationContextUtils applicationContext 'getBean("a").paramsMap.remove("000")'
当类A不是bean时,通过下面方式查看
getstatic com.tcnp.common.authys.A paramsMap -x 3
作者:jicing
出处:https://www.cnblogs.com/jicing/p/17310999.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?