基于Netty的应用程序性能问题

我有一个基于Netty的生产者基于消费者的应用程序。 基本要求是构建一个面向消息的中间件(MOM)

妈妈

所以MOM基于排​​队的概念(排队使系统松散耦合,这是应用程序的基本要求)。 代理了解MQTT协议。 我们在本地机器上执行应用程序的压力测试。 这些是本地机器的规格。

在这里输入图像描述

我们获得了很好的结果。 但是,我们的生产服务器是基于AWS Ubuntu的。 所以我们强调在AWS Ubuntu服务器上测试相同的应用程序。 性能比当地系统 10倍。 这是AWS服务器的配置。

在这里输入图像描述

我们尝试了以下方法来找出问题所在。

  • 最初我们检查了业务逻辑中的错误。 没有找到任何。
  • 使代理,客户端和所有其他依赖在mac和aws上一样。 我的意思是相同的依赖关系是我们在aws上安装了与mac上相同的版本。
  • 增加了AWS上的限制。
  • 使用sysctl设置。
  • 我们使用的是Netty 4.1,我们怀疑它可能是Netty错误,因为我们还没有Netty 4.1的稳定版本。 所以我们甚至使用Netty 3.9.8 Final(Stable)构建了整个应用程序,我们仍然面临同样的问题。
  • 大大增加了AWS机器的硬件配置。
  • 现在我们已经完全没有选择。 两个机器上的java版本是相同的。

    在这里输入图像描述

    所以对我们来说最后的办法是使用NodeJS来构建整个应用程序,但这需要很多努力,而不是在Netty本身中调整某些东西。 我们不是在寻找基于Java的Netty替代品,因为我们认为这可能是JVM NIO在Mac和Ubuntu上本地实施的一个缺陷。

    我们可以尝试进一步解决这个错误。 这是一个Netty固有的问题。 或者,这是否与Mac和Ubuntu上的一些内部实现有关,这些实现与我们看到的不同并导致性能差异?

    编辑

    压力测试参数如下。

  • 我们有1000个客户端每秒发送1000条消息(全球费率)。
  • 我们进行了约10分钟的测试,以了解延迟。
  • 在服务器端,我们有10个消费者线程处理消息。
  • 我们为每个客户端提供了一个新的ChannelHandler实例。
  • 对于Netty所需的老板池和工作池,我们使用了缓存线程池。
  • 我们已经尝试调整消费者线程,但无济于事。
  • 编辑2

    这些是jvmtop针对负载测试的一个阶段提供的分析器结果。

    在这里输入图像描述

    链接地址: http://www.djcxy.com/p/95219.html

    上一篇: Netty based application performance issues

    下一篇: Netty versus blocking socket performance