gpt4 book ai didi

java - Jersey @BeanParam 和 HK2 ServiceLocatorImpl 之间的内存泄漏

转载 作者:行者123 更新时间:2023-11-29 08:47:36 25 4
gpt4 key购买 nike

我们已经在生产环境中运行 Jersey 一段时间了,最​​近注意到我们开始泄漏内存。挖掘时我们发现从HK2 2.3.0开始在HK2类(org.jvnet.hk2.internal.ServiceLocatorImpl.class)中添加了一个injecteeToResolverCache

这是来自 ServiceLocatorImpl.class 的行

private final Cache<Injectee, InjectionResolver<?>> injecteeToResolverCache = new Cache<Injectee, InjectionResolver<?>>(new Computable<Injectee, InjectionResolver<?>>()    

在我们的设置中,我们使用的是 jersey 2.9 (hk 2.3.0),我们有使用 @BeanParam 的资源方法,看起来像这样:

public CustomResponse getStuff(
@BeanParam Paging paging, @BeanParam CustFilter filter){...

似乎正在发生的事情是 HK2 2.3.0 正在将标记为 BeanParameter 的任何实例缓存为 injecteeToResolverCache 中的 Injectee。由于“paging”和“filter”BeanParams 的新实例是在每次调用“getStuff”资源时创建的,因此每次调用都会将 2 个新条目添加到缓存中。在事情开始崩溃之前,我们在这个缓存中收集了超过 1000 万个条目。

有没有其他人遇到过这个问题,或者我们是否错误地使用了框架?

现在我们已经降级到 jersey 2.8,这似乎可以正常工作,因为它依赖于没有注入(inject)缓存的 Hk2 的 2.2.0。

谢谢!克里斯

最佳答案

我们已经找到内存泄漏的可能原因,但需要在 HK2 和 Jersey 之间进行更改。 HK2 允许对其 API 之一进行一些不良使用,此后已明确检查并禁止使用。然而,Jersey 以这种方式使用 API,这意味着 Jersey 将不得不进行更改以执行其他操作。这还没有发生,但会发生。

关于java - Jersey @BeanParam 和 HK2 ServiceLocatorImpl 之间的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24371940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com