transmittable-thread-local
transmittable-thread-local copied to clipboard
本地DEBUG进不到JdkExecutorTtlTransformlet里面
env:macos,jdk8
- 本地项目里通过
new ThreadPoolExecutor
方式创建线程池。 - 项目里通过@Bean方式注入对应ThreadPoolExecutor到容器里。
通过-javaagent的方式进行启动项目,发现在对应启动过程中,并没进入到JdkExecutorTtlTransformlet中进行增强线程的使用,想请问下当前不生效的原因有哪些(通过arthas查看对应的class文件,发现并没有TtlTransformletHelper
类的加载)
关于agent运行的debug,要查一下资料。 @MentosL 我自己也没去debug过(通过单元测试/集成测试 验证agent功能)。
没进入到JdkExecutorTtlTransformlet中进行增强线程的使用
可能和你的运行方式、使用方式相关。
注意使用稳定版本,目前是2.14.0
。 @MentosL
JdkExecutorTtlTransformlet
还不是稳定版本中的类。
如果要大家来给排查,需要提供一个极简可运行复现问题的demo。 (方便排查的人能运行起来)
谢谢回复。
我本地是通过IDEA debug形式进行查看的,同时服务启动之后,也通过arthas工具查看当前classloader装载情况,发现没有生效的情况。
好的,我晚一点提供一个简单的demo放到这边。
提供了一个简易版本的 Demo,辛苦大佬麻烦查看下,本地是通过arthas进行查看字节码增强的
分享一下我的 DEBUG agent 的方案:
- 应用程序启动时添加 debug 参数: -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005 (如果是用 IDE 启动, 请使用正常运行模式启动,而不是debug 模式)
- 在 Agent 项目中, 新建远程DEBUG , 连接到本地 5005 端口.
这样就能debug agent 了
另外一种方案: 在 IDEA 中,把 agent 源码项目作为 module 和你业务项目放在一起就能 debug