【问题标题】:Lot of Netty Threads in Native.epollWaitNative.epollWait 中有很多 Netty 线程
【发布时间】:2020-03-06 10:04:02
【问题描述】:

我正在像这样初始化 Netty 线程池:- bossGroup = new EpollEventLoopGroup(1); workerGroup = new EpollEventLoopGroup(1); 这为在分配有 40 个 vCPU 的 VM 上运行的单个应用程序创建了 80 多个线程。有没有办法可以减少这些线程? 是不是预计服务器和客户端的数量会增加? 使用 Netty final 4.1.32

【问题讨论】:

  • 使用 Netty 4.1.32 最终版
  • 如果您将 0 传递给该构造函数(或其本身传递 0 的重载之一),Netty 将仅使用 2 * 可用处理器,所以我不相信您正在使用它。请提供minimal reproducible example
  • 感谢您的回答。我当然会尝试提供一个可重现的例子。但是,如果应用程序有上面粘贴的这两行代码来初始化 EpollEventLoopGroup - 然后对于运行 40 个 vCPU 的应用程序 - 是否可以粗略估计 epollWait0 中有多少线程并具有堆栈跟踪在下一条消息中给出
  • io.netty.channel.epoll.Native.epollWait0 (bci=0, native 方法) io.netty.channel.epoll.Native.epollWait (Native.java:114, bci=19, c2 ) io.netty.channel.epoll.EpollEventLoop.epollWait (EpollEventLoop.java:253, bci=99, c2) io.netty.channel.epoll.EpollEventLoop.run (EpollEventLoop.java:278, bci=73, c2 osr - bci: 0) io.netty.util.concurrent.SingleThreadEventExecutor$5.run (SingleThreadEventExecutor.java:909, bci=44, 解释器) io.netty.util.concurrent.FastThreadLocalRunnable.run (FastThreadLocalRunnable.java:30, bci=4 , 解释器) java.lang.Thread.run (Thread.java:748, bci=11, 解释器)
  • 应该只有 2 个,每组一个。 (也许您正在设置更多您没有向我们展示的内容。)

标签: java performance netty


【解决方案1】:

您显示的代码将仅创建 2 个EpollEventLoop 实例,因此只有两个线程将在 epollWait(...) 中结束。您必须多次执行此代码,或者在不同的地方进行不同的配置以得到更多线程。另一种可能性是您多次执行它,但一旦完成使用它就错过了在EpollEventLoopGroup 上调用shutdownGracefully()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-13
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    相关资源
    最近更新 更多