【发布时间】:2015-05-11 20:45:41
【问题描述】:
通过 Apache 风暴螺栓,我使用 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)
我在我的风暴拓扑中使用 ES 传输客户端的单个实例,它有大约 18 个输出流调用 ES 客户端以将数据写入 ES 集群。
为什么 ES 传输客户端会产生这么多线程?有什么办法可以调整这个吗?我尝试查找 ES 文档,但它没有提供有关传输客户端线程机制的任何内部细节,也没有提供调整客户端线程数的选项。
【问题讨论】:
-
1000 听起来很多。你能在这里粘贴更多信息吗,比如你的 Storm 配置,你用来启动 Storm 的命令行等等
-
运行风暴拓扑的机器上有多少个 CPU 内核?
-
您能否详细介绍一下 ES 传输客户端如何实例化到您的拓扑中?
-
我们也在调查使用 Node 客户端时的大量线程。你的发现有什么更新吗?
标签: multithreading elasticsearch apache-storm