gpt4 book ai didi

java - AsyncHttpClient 创建了太多 AsyncHttpClient 计时器线程

转载 作者:行者123 更新时间:2023-12-02 01:53:15 25 4
gpt4 key购买 nike

我正在使用 AsyncHttpClient 2.3.0 和默认配置。

我注意到 AHC 创建了两种类型的线程(来自线程转储):

1)

AsyncHttpClient-timer-478-1" - Thread t@30390    java.lang.Thread.State: TIMED_WAITING
at java.lang.Thread.$$YJP$$sleep(Native Method)
at java.lang.Thread.sleep(Thread.java)
at io.netty.util.HashedWheelTimer$Worker.waitForNextTick(HashedWheelTimer.java:560)
at io.netty.util.HashedWheelTimer$Worker.run(HashedWheelTimer.java:459)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:748)

2)

AsyncHttpClient-3-4" - Thread t@20320    java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.$$YJP$$epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.epollWait(EPollArrayWrapper.java)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked <16163575> (a io.netty.channel.nio.SelectedSelectionKeySet)
- locked <49280039> (a java.util.Collections$UnmodifiableSet)
- locked <2decd496> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:62)
at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:753)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:409)
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:886)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:748)

我预计 AsyncHttpClient 在幕后使用一些线程。但运行几天后,AsyncHttpClient 创建了约 500 个 AsyncHttpClient-timer-xxx-x 线程和一些 AsyncHttpClient-x-x。它的调用不是很频繁,每个周期可能也有约 500 次。仅executeRequest使用(执行请求并获取返回的 future )https://static.javadoc.io/org.asynchttpclient/async-http-client/2.3.0/org/asynchttpclient/AsyncHttpClient.html#executeRequest-org.asynchttpclient.Request-org.asynchttpclient.AsyncHandler- :

<T> ListenableFuture<T> executeRequest(Request request, AsyncHandler<T> handler);

我看过有关连接池配置的页面 ( https://github.com/AsyncHttpClient/async-http-client/wiki/Connection-pooling ),但没有看到有关线程池配置的内容。

两种类型的线程有什么区别,什么会导致创建大量线程?我应该应用什么配置吗?

最佳答案

AHC 有两种类型的线程:

  1. 用于 I/O 操作。在你的屏幕上,它是 AsyncHttpClient-x-x线程。 AHC 创建 2*core_number 个。
  2. 超时。在你的屏幕上,它是 AsyncHttpClient-timer-1-1 线程。应该只有一个

任何不同的数字都意味着您正在创建多个客户端。

来源:GitHub 上的问题 https://github.com/AsyncHttpClient/async-http-client/issues/1658

关于java - AsyncHttpClient 创建了太多 AsyncHttpClient 计时器线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57414200/

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