Java TCP/IP Socket写性能优化

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.

  1. java.net.Socket的任何替代方法都可以减少套接字传输时间?
  2. 任何优化技术,以提高性能
  3. setPerformancePreferences()有用吗?

Pet*_*rey 5

我们没有使用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之间的延迟.