Neh*_*rma 8 java performance tcp low-latency socket.io
服务器环境
Linux/RedHat
6 cores
Java 7/8
Run Code Online (Sandbox Code Playgroud)
关于申请:
我们正在开发一个使用Java的低延迟(7-8毫秒)高速交易平台.在满足算法条件后发送多腿订单
问题
使用TCP/IP java.net.SocketAPI(使用java.io.OutputStream.write(bytes[] arg0))向交换机发出的订单.Profiler测量记录为5-7微秒,根据我们的低延迟要求,这是非常高的.我们没有像在stacktrace中发布的一个问题中所建议的那样使用setPerformancePreferences()api.
题
我们没有使用setPerformancePreferences()api
它什么都不做,从来没有.我不担心.
java.net.Socket的任何替代方法都可以减少套接字传输时间?
问题肯定不是软件问题.你可以在不同的机器上从Java到Java获得<8微秒,但是你需要像Solarflare或Mellanox这样的低延迟网卡.
如果您想要快速处理,您应该考虑使用高GHz的haswell处理器,可能超过4.2或4.5 GHz的时钟频率或双插槽Haswell Xeon.这些成本与交易成本相比并不高.
任何优化技术,以提高性能
使用非阻塞NIO即ByteBuffers并忙于等待套接字连接.(我不会使用选择器,因为它们会增加相当多的开销)我会关闭nagle.
对于某些微调,请在隔离的cpu上使用亲和绑定线程.
setPerformancePreferences()有用吗?
看源头......我会让你成为法官.
public void setPerformancePreferences(int connectionTime,
int latency,
int bandwidth)
{
/* Not implemented yet */
}
Run Code Online (Sandbox Code Playgroud)
Java 7/8
根据使用的版本,我将从Java 8开始,因为它有很多改进的转义分析,可以减少短期对象的垃圾,从而有助于减少GC与GC之间的延迟.