Java 生产环境诊断工具选型

背景 生产环境曾运行在 JDK 8。线上出现问题时,用 BTrace attach 到运行中的 JVM:按条件过滤慢方法(例如耗时超过 9ms),持续输出,不改代码、不重启。 当时 JFR 仍是商业特性,attach 式动态追踪是可行且低成本的方案之一。本文先记录 JDK 8 时代的诉求与 BTrace 用法,其它 JDK 版本下的工具对照见文末章节。 JDK 8 时代 BTrace 在解决什么 从 BTrace 使用笔记 中的脚本可以看出,核心需求是: attach 到运行中的 JVM,不重启 按条件过滤慢方法(例如大于 9ms) 持续输出,而不是只看一次快照 必要时查看参数、返回值、调用栈 示例脚本(慢调用过滤 + 计数): @OnMethod(clazz = "com.wiloon.package0.Class0", method = "method0", location = @Location(Kind.RETURN)) public static void printMethodRunTime(@ProbeClassName String probeClassName, @Duration long duration) { long d = duration / 1000000; if (d > 9) { i++; println("index: " + i + ", timestamp:" + timestamp("HH:mm:ss") + ", " + probeClassName + ", duration: " + d + " ms"); } } 执行方式: ...

Created 30306-05-30 · Updated 30306-05-30 · 2 min · 415 words · -