【问题标题】:Need help regarding attacking a thread leak issue需要有关攻击线程泄漏问题的帮助
【发布时间】:2019-06-18 03:51:31
【问题描述】:

因此,我们创建了一个新的 Netty4 服务器并对其产生负载。主机线程的数量随着服务器的 TPS 的增加而增长。此外,一旦负载测试结束,主机线程数不会下降(表明存在某种线程泄漏)。

我使用 jstack 进行了 hprof 转储并将其连接到 JProfiler。在线程视图中,线程的最大份额是格式。 (请注意,这是负载测试后几个小时的线程转储,是其中的一个实例,有数千个被困在其中)。

26013:42.622.361 处的线程转储

Thread group "main":

Thread "I/O dispatcher 18120":
at sun.nio.ch.EPollArrayWrapper.epollWait(long, int, long, int)
at sun.nio.ch.EPollArrayWrapper.poll(long) (line: 269)
at sun.nio.ch.EPollSelectorImpl.doSelect(long) (line: 93)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(long) (line: 86)
at sun.nio.ch.SelectorImpl.select(long) (line: 97)
at org.apache.http.impl.nio.reactor.AbstractIOReactor.execute() (line: 255)
at org.apache.http.impl.nio.reactor.BaseIOReactor.execute(org.apache.http.nio.reactor.IOEventDispatch) (line: 104) at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run() (line: 588 at java.lang.Thread.run() (line: 748)

我不确定如何从这里进一步进行(例如,我不知道执行程序服务 IO 调度程序应该引用什么)。

这个问题是关于如何解决这样的线程泄漏问题的一般指导。

【问题讨论】:

    标签: multithreading profiling threadpool


    【解决方案1】:

    所以事实证明 IO 线程调度程序是 Apache HTTP 客户端的一部分。

    我们必须保留 apache http 客户端的缓存(更迂腐的是,aws 弹性搜索客户端,因为它们是根据请求凭据设置的 https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-configuration-samples.html)。每当我们看到从该缓存中从客户端获取的新请求时。

    现在我们的负载测试抛出了许多具有不同凭据的请求。与客户端从缓存中过期相比,缓存越来越大。每个客户端都使用了越来越多的线程,直到我们用完它们。

    【讨论】:

      猜你喜欢
      • 2011-08-07
      • 1970-01-01
      • 2020-10-11
      • 1970-01-01
      • 2014-12-29
      • 2011-03-27
      • 2012-07-15
      • 1970-01-01
      相关资源
      最近更新 更多