首页 > 解决方案 > Java (Netty) 应用程序达到 11k 请求/秒的平台期

问题描述

我有过去 3 天的指标截图。一夜之间,当流量低于 11k req/sec 时,服务器运行良好,响应时间约为 0-1ms。当流量超过 11k req/sec 时,http 响应时间飙升至 ~700ms,tcp 侦听溢出峰值,haproxy 会话峰值,前端会话达到 haproxy 配置的限制或 30k。我可以通过更改配置来提高 30k 的限制,但这不会改善响应延迟或流量吞吐量,因此我将其设置为 30k。JVM 内存使用量远低于容量。cpu 使用率峰值约为 43%。那是在 12 核服务器上。我想这不是CPU限制吗?

更新:添加了没有空闲时间的新 CPU 图(这令人困惑)。添加了具有发送接收字节/秒的新网络图。

haproxy 后端会话 haproxy 测量的响应时间 haproxy 当前会话计数。 tcp 监听溢出 jvm内存使用情况 cpu 使用率(修改后没有空闲) 网络字节/秒

此外,由我的代码库中的计时器测量的内部延迟测量显示响应始终在 <1ms 内处理,即使在更高的流量时也是如此。该图有点令人困惑,但对于 <= 1 秒、<= 0.75 秒、...、<= 0.005 秒、<= 0.001 秒的响应基本上有单独的图,并且它们都是相同的,因为响应都是 <= 0.001 秒,由应用程序代码中的计时器测量。

内部延迟指标

服务器应用程序是使用 Java 编写的,使用截至本文撰写时的 Netty 当前版本 4.1.25。haproxy 1.6.x 在应用程序前面运行以获取指标,否则执行简单的代理。该服务器正在运行带有最新补丁的 Ubuntu 16.04.x。我之前在 Ubuntu 存储库中使用过 OpenJDK 8,但现在正在运行下载的 OpenJDK 10.0.1 版本。两个 OpenJDK 之间没有明显的区别。

我能做些什么让这台服务器处理更大的流量吗?是否有任何其他我可以捕获的指标或我可以检查的设置来帮助阐明问题?

标签: javalinuxperformancenetty

解决方案


推荐阅读