我们正在尝试改进Java代理应用程序的平均延迟。
Java应用程序从客户端接收消息并将其代理到必要的服务器。
该协议是二进制的,asynchronous的。
该拓扑结构是:
Client (1) - Java proxy (2) - Server (3)
呼叫stream程是
(1)-(2)-(3)-(2)-(1)
对于Java代理来说,要求是一个方向跳的2 ms平均延迟开销。
我们已经注意到,如果我们增加客户端数量,延迟开销会线性下降。
比方说,
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个线程; 红帽企业Linux服务器版本5.6
在执行testing之前,我会确保JVM预热并设置为实时优先级。 您应该能够实现低于0.1毫秒的延迟,超过networking延迟。
您的Java代理在等待服务器响应时被阻塞? 这将解释你所看到的时代。