服务器环境
Linux/RedHat
6 cores
Java 7/8关于应用程序的 :
我们正在开发一个使用Java的低延迟(7-8ms)高速交易平台。多腿订单是在满足algo条件后发出的。
问题
使用TCP/IP java.net.Socket API(使用java.io.OutputStream.write(bytes[] arg0) )对交换的订单。剖面仪测量是记录5-7微秒,这是非常高的,根据我们的低延迟要求。我们没有像stacktrace中的一个问题所建议的那样使用setPerformancePreferences() api。
问题
发布于 2015-05-08 12:54:12
我们没有使用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 */
}Java 7/8
关于要使用的版本,我将从Java 8开始,因为它有很多改进的转义分析,可以减少短寿命对象的垃圾,从而帮助减少GC与抖动之间的延迟。
发布于 2015-05-08 14:37:03
我想到了几件事:
JNI:JNI允许您编写从您的Java代码中运行的C代码。Java代码中运行缓慢的关键部分可以迁移到C/C++,以提高性能。首先需要做的工作是确定这些关键点是什么,以及是否值得将其转移到C/C++。
Java不安全:想变得危险吗?使用Java不安全来绕过这个讨厌的GC。这里是关于它的更多信息。在Github上,您可能会发现一些很酷的包装代码,可以更安全地使用Java。这是一个。 更多信息。
LMAX消毒器:阅读更多关于它的这里。这家公司还在用Java建立一个快速交易系统。中断器允许更快的线程间通信。
字节码检查:通过查看字节码来检查代码。我这样做是为了一个我制作的电子游戏,并且能够简化代码。您需要一个很好的工具来将类文件转换为可读的字节码。THis可能是我使用的工具。
改进的垃圾收集:您试过使用G1垃圾收集器吗?或者和老GC混在一起
高可伸缩性:这个网站充满了快速生成代码的好信息。下面是一个可能有帮助的例子。
新API我不知道如何确切地使用New,但是在我读过的文章中提到了它。这是另一篇关于它的文章。您可能需要通过JNI使用它。
https://stackoverflow.com/questions/30124158
复制相似问题