gpt4 book ai didi

multithreading - Elasticsearch Transport客户端产生大量线程

转载 作者:行者123 更新时间:2023-12-03 00:21:50 25 4
gpt4 key购买 nike

通过Apache Storm bolt ,我正在使用Elasticsearch的传输客户端远程连接到ES集群。当我获取Storm进程的jstack输出时,我注意到有近1000个带有ES堆栈跟踪的线程,例如:

elasticsearch[Flying Tiger][transport_client_worker][T#22]{New I/O worker #269}" daemon prio=10 tid=0x00007f80ac3cb000 nid=0x356b runnable [0x00007f7e96b2a000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:79)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:87)
- locked <0x00000000d148d138> (a sun.nio.ch.Util$2)
- locked <0x00000000d148d128> (a java.util.Collections$UnmodifiableSet)
- locked <0x00000000d148c9b8> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:98)
at org.elasticsearch.common.netty.channel.socket.nio.SelectorUtil.select(SelectorUtil.java:68)
at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioSelector.select(AbstractNioSelector.java:415)
at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:212)
at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:89)
at org.elasticsearch.common.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178)
at org.elasticsearch.common.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
at org.elasticsearch.common.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)

我正在整个 Storm 拓扑中使用ES传输客户端的单个实例,该实例具有大约18个输出流,这些输出流调用ES客户端将数据写入ES群集。

为什么ES传输客户端产生这么多线程?有什么办法可以调整吗?我尝试查找ES文档,但没有提供有关传输客户端线程机制的任何内部详细信息,也没有提供调整客户端线程数的选项。

最佳答案

我以前也有非常相似的经历。正如您已经提到的,一个传输客户端创建了数十个线程,包括计时器等。

您需要检查的是每个工作进程是否确实有一个传输客户端。早些时候,当我使用32个传输客户端时,有1000多个线程,并且在我将其正确修改为单例实例后,线程数减少到不到200(包括我创建的所有其他线程)拓扑)

关于multithreading - Elasticsearch Transport客户端产生大量线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30177336/

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