首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java /IP套接字写性能优化

Java /IP套接字写性能优化
EN

Stack Overflow用户
提问于 2015-05-08 12:42:03
回答 2查看 4.5K关注 0票数 8

服务器环境

代码语言:javascript
运行
复制
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。

问题

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

回答 2

Stack Overflow用户

发布于 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()有用吗?

看看源头..。我会让你当法官。

代码语言:javascript
运行
复制
public void setPerformancePreferences(int connectionTime,
                                      int latency,
                                      int bandwidth)
{
    /* Not implemented yet */
}

Java 7/8

关于要使用的版本,我将从Java 8开始,因为它有很多改进的转义分析,可以减少短寿命对象的垃圾,从而帮助减少GC与抖动之间的延迟。

票数 5
EN

Stack Overflow用户

发布于 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使用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30124158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档