百口同声网

Netty参数设定推荐

Netty参数设定推荐

Netty参数设定

  • BossGroup
  • WorkerGroup
  • leakDetectorLevel

BossGroup

  • 结论
    当你使用BossGroup和WorkerGroup时BossGroup推荐设定为监听的数设端口数,即监听多少端口就设定为多少。定推
  • 原因
    netty的数设BossGroup有多个线程(也就是NioEventLoop),建立连接时会有一个线程负责accept,定推其他的数设线程负责业务处理。
    当使用BossGroup和WorkerGroup两个线程池时,定推BossGroup的数设其他线程不会工作;但是当你的程序需要绑定其他端口时,又会从BossGroup里面拿出一个线程绑定其他端口。定推

WorkerGroup

  • 结论
    推荐设定为核数*2(在不修改ioRatio的数设前提下)。
  • 原因
    一般程序分为I/O密集型任务和CPU密集型任务
    对于CPU密集型任务而言,定推理论上“线程的数设数量 = CPU核数”就是合适的。但是定推,在实际应用中的数设线程数量一般会设置为“CPU核数 + 1”。因为线程有可能因为内存页失效或其他原因导致阻塞,定推多设置一个线程可以保证CPU的数设利用率。
    对于I/O密集型,假设IO耗时和CPU耗时比为R,那么计算公式如下:
    最佳线程数 = CPU核数 *(1 + R)
    而Netty的默认线程池个数,就是假设了I/O耗时和CPU耗时的占比是1:1,实际上Netty有一个参数叫ioRatio,默认为50,它表示在一个轮事件循环中,单个I/O线程执行I/O事件和执行异步任务的耗时占比为 1:1。相当于 R = 1,代入上面的公式,就可以得出Netty默认设置的线程池大小自然就是
    默认线程池大小 = CPU核数 * (1 + 1)

leakDetectorLevel

  • DISABLED(禁用): 不进行内存泄露的检测;
  • SIMPLE(操作简单): 抽样检测,且只对部分方法调用进行记录,消耗较小,有泄漏时可能会延迟报告,默认级别;
  • ADVANCED(高级): 抽样检测,记录对象最近几次的调用记录,有泄漏时可能会延迟报告;
  • PARANOID(偏执): 每次创建一个对象时都进行泄露检测,且会记录对象最近的详细调用记录。是比较激进的内存泄露检测级别,消耗最大,建议只在测试时使用。

未经允许不得转载:百口同声网 » Netty参数设定推荐