由于将请求从主线程传递到工作线程,netty 中出现延迟?

2024-04-22

我有一些关于 Netty(服务器端)、TCP/IP 应用程序的问题;

我想知道在将请求从老板线程传递到工作线程时是否会因为 netty(由于缺少配置等)而出现延迟?

我在用 :

new OrderedMemoryAwareThreadPoolExecutor(350, 0, 0, 1, TimeUnit.SECONDS);

实际上,我设置了最大线程数350因为我不确定最佳数量。我每分钟记录一次同时工作线程数,似乎平均值太低(勉强超过10)。所以我会减少这个数字,因为它不是必需的。

为了获得最佳性能,是否还有其他参数、我应该注意的要点?

bootstrap.setOption("tcpNoDelay", true);- 设置这个参数有什么缺点吗?考虑到交货时间非常重要。

线程池执行器:

OrderedMemoryAwareThreadPoolExecutor executor = new OrderedMemoryAwareThreadPoolExecutor(48, 0, 0, 1, TimeUnit.SECONDS);

这是我的管道工厂:

    ChannelPipeline pipeline = pipeline();
    pipeline.addLast("frameDecoder", new DelimiterBasedFrameDecoder(GProperties.getIntProperty("decoder.maxFrameLength", 8000 * 1024), Delimiters.nulDelimiter()));
    pipeline.addLast("stringDecoder", new StringDecoder( CharsetUtil.UTF_8 ));      
    pipeline.addLast("frameEncoder", new NullTermMessageEncoder());
    pipeline.addLast("stringEncoder", new JSONEncoder( CharsetUtil.UTF_8 ));
        pipeline.addLast("timeout", new IdleStateHandler(idleTimer, 42 , 0, 0));
    pipeline.addLast("executor", new ExecutionHandler(executor));
    pipeline.addLast("handler", new GServerHandler());

和服务器引导程序:

gServerBootstrap = new ServerBootstrap(new NioServerSocketChannelFactory(Executors.newCachedThreadPool(), Executors.newCachedThreadPool()));
        gServerBootstrap.setPipelineFactory(new GServerPipelineFactory());
                gServerBootstrap.setOption("backlog", 8129);
                gServerBootstrap.setOption("child.tcpNoDelay", true);
        gServerBootstrap.bind(new InetSocketAddress(GProperties.getIntProperty("server.port", 7679)));

您对此配置有何建议?


Netty Boss线程仅用于建立连接,工作线程用于运行NioWorker(非阻塞读/写)或OioWorker(阻塞读/写)。

如果您有执行处理程序,工作线程会将消息事件提交给 OrderedMemoryAwareThreadPoolExecutor。

1) 将 Netty I/O 工作线程数增加到超过处理器数量 * 2 不会有帮助。如果您正在使用分阶段执行程序,则为非 I/O 任务拥有多个分阶段执行处理程序可能会增加延迟。

注意:最好在 OMTPE 中设置自己的 ObjectSizeEstimator 实现 构造函数,因为许多 CPU 周期花费在计算已使用的通道内存上。

2)还有一些其他的Netty参数你可以尝试

   //setting buffer size can improve I/O
   bootstrap.setOption("child.sendBufferSize", 1048576);
   bootstrap.setOption("child.receiveBufferSize", 1048576); 

   // better to have an receive buffer predictor 
   bootstrap.setOption("receiveBufferSizePredictorFactory", new AdaptiveReceiveBufferSizePredictorFactory(MIN_PACKET_SIZE, INITIAL_PACKET_SIZE, MAX_PACKET_SIZE))  

   //if the server is sending 1000 messages per sec, optimum write buffer water marks will
   //prevent unnecessary throttling, Check NioSocketChannelConfig doc   
   bootstrap.setOption("writeBufferLowWaterMark", 32 * 1024);
   bootstrap.setOption("writeBufferHighWaterMark", 64 * 1024);

3)服务器引导应该是 bootstrap.setOption("child.tcpNoDelay", true) 。

有一个实验性的隐藏参数:

Netty NioWorker正在使用SelectorUtil.select来等待选择器事件,等待时间被硬编码在SelectorUtil中,

selector.select(500);

设置较小的值可以在 netty sctp 传输实现中提供更好的性能。不确定 TCP。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

由于将请求从主线程传递到工作线程,netty 中出现延迟? 的相关文章

  • 如何在Spring的applicationContext.xml中指定默认范围来请求范围?

    我想让所有 bean 请求默认作用域 但是 Spring 文档说默认作用域是 Singleton 第 3 4 1 和 3 4 2 节http static springsource org spring docs 2 5 x referen
  • java“void”和“非void”构造函数

    我用 java 编写了这个简单的类 只是为了测试它的一些功能 public class class1 public static Integer value 0 public class1 da public int da class1 v
  • 从 eclipse 运行时 java.io.FileNotFoundException: (没有这样的文件或目录)

    我正在写入文件并想要控制台输出 TODO Create a game engine and call the runGame method public static void main String args throws Excepti
  • firestore快照监听器生命周期和定价之间有什么关系?

    在我的活动中 我有一个字符串列表 这些字符串表示我想要附加快照侦听器的 Firestore 文档 我使用 Acivity ModelView 存储库结构 在活动的 onCreate 中 我向 ViewModelProvider 询问适当的
  • 我们可以在三元运算符(Java)中使用命令吗?

    这是一个工作代码 String a first String b second String object System out println object null a b 但它不是 String a first String b se
  • 独占锁定ConcurrentHashMap

    我知道不可能锁定 ConcurrentHashMap 进行独占访问 但是 我找不到原因 是因为构成CHM的 Segment 没有被api公开吗 据推测 如果是的话 客户端代码可以执行 交接 锁定 Cheers 我知道不可能锁定 Concur
  • Java 的 QP 求解器 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 会话 bean 中的 EntityManager 异常处理

    我有一个托管无状态会话 bean 其中注入了 EntityManager em 我想做的是拥有一个具有唯一列的数据库表 然后我运行一些尝试插入实体的算法 但是 如果实体存在 它将更新它或跳过它 我想要这样的东西 try em persist
  • 您能让 Tomcat 6 stdout.log 文件表现得像 log4j DailyRollingFileAppender 吗?

    我们使用的是 Tomcat 6 的 Windows 安装 默认情况下 我们应用程序的 log4j 输出将转到 catalina base logs stdout log 文件 该日志文件仅在我们重新启动 Tomcat 时滚动 并且文件名始终
  • 如何自定义JProgressBar?

    我正在制作一个启动器 我想要一个自定义的进度栏 我已经做了一些研究 并且可以使用 JavaFX 从未用它做过任何事情 并且可以通过替换 UI 来实现 我正在寻找一个具有圆形边缘和圆形填充的酒吧 像这样的事情 package gui impo
  • java JFileChooser 文件大小过滤器

    我知道我可以按文件类型进行过滤 但是可以按文件大小进行过滤吗 例如 JFileChooser 仅显示 3 MB 以内的图片 简短的回答应该是 你尝试过什么 长答案是肯定的 JFileChooser fc new JFileChooser f
  • 在 Mac 上使用 JRE 打开 jar 文件

    我有一个 jar 文件 旨在通过命令行运行 我不打算在运行应用程序的机器上进行任何java开发 我的思考过程是 因此我应该只需要JRE而不是JDK 此外 JDK 大约是 JRE 的 4 倍 我不想下载它 在 Mac 上安装 JRE 时 它不
  • Scala repl 抛出错误

    当我打字时scala在终端上启动 repl 它会抛出此错误 scala gt init error error while loading AnnotatedElement class file usr lib jvm java 8 ora
  • 为什么 std::atomic 比 volatile bool 慢很多?

    多年来我一直使用 volatile bool 来控制线程执行 并且效果很好 in my class declaration volatile bool stop In the thread function while stop do th
  • Android 中的字符串加密

    我正在使用代码进行加密和加密 它没有给出字符串结果 字节数组未转换为字符串 我几乎尝试了所有方法将字节数组转换为字符 但没有给出结果 public class EncryptionTest extends Activity EditText
  • Java SE + Spring Data + Hibernate

    我正在尝试使用 Spring Data Hibernate 启动 Java SE 应用程序 并且到目前为止已经完成了以下操作 配置文件 Configuration PropertySource classpath hibernate pro
  • JDK 7 的快速调试/调试构建

    我正在寻找 JDK 的调试 或者我猜他们称之为快速调试构建 以启用在运行时生成的打印程序集以及查找性能问题时所需的其他诊断 就目前情况而言 我似乎找不到可以直接使用的 现成的 快速调试构建二进制包 有人可以帮我提供下载链接 或者至少提供有关
  • Java的hashCode可以为不同的字符串产生相同的值吗?

    使用java的哈希码函数是否可以为不同的字符串提供相同的哈希码 或者如果可能的话 其可能性的 是多少 Java 哈希码是 32 位 它散列的可能字符串的数量是无限的 所以是的 会发生冲突 百分比是没有意义的 项目 字符串 的数量是无限的 而
  • Java泛型类型

    当我有一个界面时 public interface Foo
  • VB.NET 是否优化字符串文字的串联?

    如同this https stackoverflow com questions 288794 does c optimize the concatenation of string literals问题 但对于 VB NET 来说 因为我

随机推荐

  • 在SQL Server 2012 TSQL中,使用XML RAW、XML AUTO和XML PATH有什么区别

    正如标题所示 欢迎所有开放的思想 我在我的电脑上测试了一下 输出似乎是一样的 例如 USE BOB DATABASE SELECT ID Name First Name Last Name FROM DBO T User FOR XML A
  • 生成字符串所有组合的算法

    我在网上找到了一个链接 其中显示了生成字符串的所有组合的算法 http www mytechinterviews com combinations of a string http www mytechinterviews com comb
  • 为什么选择源进行 SQL 架构比较会导致 VS2012 崩溃?

    似乎没有任何原因 选择 SQL gt 架构比较 gt 新架构比较 然后尝试 选择源 会导致 Visual Studio 2012 崩溃 几个月来它一直按预期工作 除了尝试重新安装之外还有其他可能的修复方法吗 注意 尝试在 Visual St
  • 如何将数据从servlet传递到android应用程序

    I have a form in android upon submit im inserting it into database using servlet i have to show to user that form was in
  • 如何在JavaScript中计算3点之间的角度? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想在 JavaScript 中获取 3 点之间的角度 如果我有积分A x1 y1 B x2 y2 and C x3 y3 我想得到由线A
  • Nightwatch.js 始终返回退出代码 1

    我尝试将 Nightwatch js 测试集成到 Jenkins 作业中 如果测试失败 我希望 Jenkins 构建失败 如果所有测试都通过 我希望构建通过 但我认识到夜巡总是返回exit code 1 测试通过或失败并不重要 但我期望ex
  • Python 转换日期格式

    给定一个像这样的字符串 2020 08 14 我如何将其转换为 14 August 2020 使用Python 3 您可以使用datetime用于重新格式化日期字符串的模块 使用strptime你可以从一个字符串读入一个datetime对象
  • 如何用 POST 替换 window.open(...)

    我目前有一些运行的代码window open urlWithGetParams 线 据我所知 这将迫使我使用GET要求 我想通过 POST 请求来完成此操作 有解决方法吗 我没有结婚window open 任何一个 我愿意接受任何允许我通过
  • 我可以换行 img 替代文本吗?

    我有一个由 css 样式设置为 100x75 的图像 当它不加载时 替代文本会加载到空间中 但会将容器扩展到超过 100 像素宽度 我怎样才能防止这种情况发生 要么把它剪掉 要么把它包起来 好吧 我在某种程度上明白了 我只是将图像包装在相同
  • QUERY Google Sheets 函数中同一字符串中的引号和撇号

    我想知道如何处理这样的查询 假设电子表格的单元格 A2 中包含以下文本 Case Bakers Flats 12 White Flour Tortillas 10 12ct 并需要将以下公式代入B2 QUERY importrange KE
  • 了解 JPA 序列生成器

    我正在使用 spring data JPA 的序列生成器将主键分配给实体 模型包含 Id GeneratedValue strategy GenerationType SEQUENCE generator seq post Sequence
  • 使用 GPUImageFilter 时发生崩溃

    我从 Github 上 Brad Larson 的教程开始 当我将这些代码添加到我的项目中时 void viewDidLoad super viewDidLoad GPUImageVideoCamera videoCamera GPUIma
  • reg 声明中的位顺序

    如果我需要使用 4 个 8 位数字 我会声明以下 reg reg 7 0 numbers 3 0 我对第一个和第二个声明 7 0 和 3 0 之间的区别感到很困惑 他们应该按什么顺序来 第一个是保留数字的大小 而第二个是保留数字的数量 还是
  • 为什么修改数组的副本会影响原始数组?

    大家好 如果这是一个菜鸟问题 我很抱歉 但我使用的是 python 我有一个问题 我复制一个数组 但当我修改副本时 它会影响原始数组 我想将边界矩阵的线性偏移添加到一组坐标 boundaries 5 818 0 0 0 0 0 0 5 81
  • TFS + 获取最新版本

    当我从 TFS 获取最新版本时 有没有办法列出已更新的文件 如果您使用的是 Visual Studio IDE 您可以在 输出 窗口中看到文件列表 要查看 输出 窗口 请选择菜单 视图 gt 输出 希望这可以帮助
  • Dialyzer 无法识别使用多态类型的函数中的错误

    背景 我正在尝试使用透析器进行多态打字 作为一个例子 我正在使用著名的Option类型 又名 Maybe Monad 现在在许多其他语言中都很流行 defmodule Test do type option t some t nothing
  • Kotlin 中参数的通用通配符

    我有一个用于监听 api 回调的抽象类 如下所示 ApiRs 是每个 API 响应对象都继承自它的父对象 abstract class ApiCallback
  • swift 中的 UIView viewwithtag 方法[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在努力学习一些快速的知识 我以编程方式添加标签 我想稍后更改它们的属性 viewwithtag 方法返回一个 UIView 如何从
  • 复制切片的通用方法

    我需要复制切片 以及底层数组的一部分 以便调用者不会改变数组的原始元素 我想我可以编写一个函数来对特定类型的数组执行此操作 func duplicateSliceOfSomeType sliceOfSomeType SomeType Som
  • 由于将请求从主线程传递到工作线程,netty 中出现延迟?

    我有一些关于 Netty 服务器端 TCP IP 应用程序的问题 我想知道在将请求从老板线程传递到工作线程时是否会因为 netty 由于缺少配置等 而出现延迟 我在用 new OrderedMemoryAwareThreadPoolExec