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

v2.13.0-Beta1: TtlExtensionTransformletManager中collectedClassLoaderHistory所对应的WeakHashMap会因为gc导致死循环造成cpu空转100% #320

Closed Aresxue closed 1 year ago

Aresxue commented 2 years ago

应用接口使用了jacksonObjectMapper,其内部序列化使用了反射机制:

image

反射时jvm会创建sun.reflect.DelegatingClassLoader

在流量高峰时, image image

大量的sun.reflect.DelegatingClassLoader实例涌入, 因为流量较大内存较小流量刚接进来时即发生了gcimage

因为gc会把对象给清理掉,然后get方法内的while循环一直找不到eq的对象,循环出不来, 最终形成了死循环逐渐耗尽CPU

现场最后形成这样的堆栈信息: image

oldratlee commented 2 years ago

问题收到。

TtlExtensionTransformletManagerv2.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

Aresxue commented 2 years ago

问题收到。

TtlExtensionTransformletManagerv2.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

没有高级功能的需求,这边后续会回退到v2.12.6

miniyk2012 commented 2 years ago

妹子挺美的

oldratlee commented 1 year ago

fixed by 0ec1ea1b187e4531866f466e0d99cfede3650dee