我们看到当负载较轻时 JVM 的性能下降的行为。特别是在多次运行中,在测试环境中,我们注意到当泵入系统的订单消息的速率降低时,延迟会恶化大约 100%。下面是有关该问题的一些背景,我将不胜感激。
简单来说,正在研究的演示 Java 交易应用程序可以被认为具有 3 个重要线程:订单接收线程、处理器线程、交换发送线程
订单接收线程接收订单并将其放在处理器 q 上。处理器线程从处理器 q 中获取它,进行一些基本处理并将其放在交换器 q 上。交换发送器线程从交换 q 中获取它并将订单发送到交换。
当输入系统的订单率从较高数量变为较低数量时,从订单接收到订单发送到交易所的延迟会恶化 100%。
尝试的解决方案:
通过发送高消息率并在降低消息率之前启动系统来预热 JVM 中的关键代码路径:不能解决问题
分析应用程序:使用分析器,它显示代码中的热点,通过改进实现可能会有 10 -15% 的改进。但是仅仅通过增加消息率获得的100%改善范围内没有任何效果。
有人对此有任何见解/建议吗?它是否与线程上的调度抖动有关。
难道是在低消息率下线程正在从核心切换出来?
我认为可能相关的2个帖子如下。但是我们的症状有点不同: