李鼎
李鼎
赞成 :+1: 开发中的`v3`在做`Agent`功能与重构(包括如 插件化)。 可以在这个版本里看看如何做
Good idea! 👍 @rainbow2019 能说一下你在Netty下,TTL - 解决的问题、场景 - 解决方式 - 使用方式/实现方式
> 可以考虑把 Ttl 存储接口分离出来 - 这个分离根据 实现的复杂膨胀 和 实际的灵活性 来定。 - 根据`TTL`的『概念』边界来 分离 出『子概念』,这个通过 需求及其设计现实 的感知 再定。 综上,是否做分离 先 **_不_** 提前决策。 @driventokill
> 这种改动有什么用啊,attach上去以后,已经加载的类没法增强,得把所有类都redefine一遍才行、、、 除非在应用Main方法里就自己attach自己 不过我也找不到启动的时候不需要TTL,运行了一阵以后需要TTL的场景。 嗯,这个改动是不够的。 一些展开的讨论 - #169
问题收到。 `TtlExtensionTransformletManager` 是 `v2.13.0-Beta1`这个**测试**版本的内容,还在实现中。 https://github.com/alibaba/transmittable-thread-local/releases/tag/v2.13.0-Beta1 请使用正式版本:如 `v2.12.6`,尤其是在线上环境。 @Aresxue https://github.com/alibaba/transmittable-thread-local/releases/tag/v2.12.6 --------- 对于`v2.13.0-Beta1`版本才有的功能,你有什么需求? @Aresxue -------- > 在流量高峰时, 大量的`sun.reflect.DelegatingClassLoader`实例涌入, 因为流量较大内存较小流量刚接进来时即发生了`gc`。 > > 因为`gc`会把对象给清理掉,然后`get`方法内的`while`循环一直找不到`eq`的对象,循环出不来, 最终形成了死循环逐渐耗尽`CPU`。 有问题分析 👍 @Aresxue
对于线程池不同的使用方式, 通过在业务`Runnable/Callable`的debug/打印异常的调用栈, 可以确认 有没有多次冗余的TTL的修饰。 用 翻看异常的调用栈 的方式,可以作成test case来自动化验证。
丰富ThreadLocal的讨论资料: - [待整理 ThreadLocal](http://wuaner.iteye.com/blog/435947) 这里的内容挺多,还不错,可以再条理整理一下。 - Java 多线程:InheritableThreadLocal 实现原理 https://github.com/pzxwhc/MineKnowContainer/issues/20 - ThreadLocal和synchronized的区别? https://www.zhihu.com/question/23089780
> * 依赖无需shade,只需要打包到 BOOT-INF > * 无需配置 bootstrap classpath > * 依赖及不导出的类可以在独立的loader中加载,避免应用会意外访问 👍 💖 `TTL v3`会提供 - 无`shade`的`API`依赖 - 分离用户`API`与`Agent`成2个依赖 也可以提供`spring-boot loader + fatjar`模式依赖 PS:`v3`作为大版本升级,可以做不兼容的修改,清理掉不好的设计与实现;当然会提供`TTL v2`的兼容包。 > * 主代码中可以依赖 kotlin,简化代码并且可以对...
> 在更新ExtensionTransformlets时使用到了WeakHashMap, > 在并发时,WeakHashMap在扩容的时候有一定概率形成环形链表,导致死循环,CPU飙升。 @dingmingcheng 你有实际出现/复现『在并发时,`WeakHashMap`死循环`CPU`飙升』风险的情况吗? --------------- 类加载过程(即[`java.lang.instrument.ClassFileTransformer#transform`](https://docs.oracle.com/en/java/javase/11/docs/api/java.instrument/java/lang/instrument/ClassFileTransformer.html#transform(java.lang.ClassLoader,java.lang.String,java.lang.Class,java.security.ProtectionDomain,byte%5B%5D))调用) 应该是 『等效单线程』不并发的。 上面这点需要通过`JVM`官方文档来确认的。 可以帮忙一起确认吗? ♥️ @dingmingcheng 如果 类加载过程 是 『等效单线程』的,则不需要 上面的`Collections.synchronizedMap`的处理逻辑。 \# 也规避了实现逻辑可以不必要的复杂性。
@dingmingcheng 收到,感谢提供的信息 ♥️ ------------ 这个PR我先理解&Review一下,然后合并