alibaba / transmittable-thread-local

📌 a missing Java std lib(simple & 0-dependency) for framework/middleware, provide an enhanced InheritableThreadLocal that transmits values between threads even using thread pooling components.
https://github.com/alibaba/transmittable-thread-local
Apache License 2.0
7.59k stars 1.69k forks source link

使用Java agent不生效,通过arthas jad看对应的类,均已被transform,但是trace不到TtlRunnable和TransmittableThreadLocal的执行记录 #535

Closed AlbertGithubAI closed 1 year ago

AlbertGithubAI commented 1 year ago

使用Java agent不生效,通过arthas jad看对应的类,均已被transform,但是trace不到TtlRunnable和TransmittableThreadLocal的执行记录。

运行环境为Tomcat容器,没有使用其它agent。还有没有其它方法来排查?

oldratlee commented 1 year ago

通过arthas jad看对应的类,均已被transform

运行的业务逻辑上,TTL Agent是不是已经生效? @AlbertGithubAI

如果TTL Agent已经运行时已生效,则可能要看看

AlbertGithubAI commented 1 year ago

通过arthas jad看对应的类,均已被transform

运行的业务逻辑上,TTL Agent是不是已经生效? @AlbertGithubAI

如果TTL Agent已经运行时已生效,则可能要看看

  • 工具(arthas)的使用
  • 或是trace是位置是否正确

业务不生效,所以来排查具体的问题,使用agent版本为2.14.2。

AlbertGithubAI commented 1 year ago

另外单独使用ExecutorServiceTtlWrapper是可以的,但是加上agent就会有问题。

oldratlee commented 1 year ago

业务不生效,所以来排查具体的问题,使用agent版本为2.14.2。

也注意确认一下,应用中使用的TTL库的版本是否为最新的。@AlbertGithubAI

关于Tomcat下,TTL Agent的使用,有相关的 issue讨论,比如可以看看 @AlbertGithubAI

AlbertGithubAI commented 1 year ago

arthas的jad是否会触发ThreadPoolExecutor类的retransform,通过打印Stack Trace发现在jad ThreadPoolExecutor之前没有TtlRunnable的堆栈,但是jad之后就有了,并且jad的结果显示已经被增强了。 @oldratlee

AlbertGithubAI commented 1 year ago

看了一下arthas jad的原理,发现在排查java agent失效原因的时候不能使用jad命令,因为jad命令会重新触发retransform。

https://github.com/alibaba/arthas/issues/763