我们正在尝试改善 Java 代理应用程序的平均延迟。Java
应用程序从客户端接收消息并将其代理到必要的服务器。
协议是二进制、异步的。
拓扑结构为:
Client (1) - Java proxy (2) - Server (3)
呼叫流程是
(1)-(2)-(3)-(2)-(1)
对于 Java 代理,单向跳跃的要求是平均延迟开销为 2 毫秒。
我们注意到,如果我们增加客户端数量,延迟开销会线性减少。
假设,
1 client -> Java proxy latency overhead = 6 ms.
2 clients -> Java proxy latency overhead = 3 ms.
4 clients -> Java proxy latency overhead = 1.5 ms.
另一方面,即使只有一个客户端,我们也必须遵守延迟要求。
如果我们用 Erlang 实现替换代理的 Java 实现,我们会观察到相同的行为。
我们可以对低级操作系统进行任何调整吗?
Java 代理主机是 2 个 Nehalem CPU X5550 2.67GHz,总共 16 个硬件线程;Red Hat Enterprise Linux Server 版本 5.6
答案1
在您进行测试之前,我会确保 JVM 已预热并设置为实时优先级。您应该能够实现网络延迟低于 0.1 毫秒的延迟。
答案2
您的 Java 代理在等待服务器响应时是否阻塞?这可以解释您看到的时间。