任何人都可以给我大概的时间(以纳秒为单位)来访问L1,L2和L3缓存,以及Intel i7处理器上的主内存吗?
虽然这不是一个特别的编程问题,但是对于某些低延迟编程挑战而言,了解这些速度细节是必要的.
我想在JVM上注册一个回调,所以我知道垃圾收集何时发生.有没有办法做到这一点?
编辑:我想这样做,所以我可以在我的应用程序日志中发生垃圾收集时注销,所以我可以看到它是否与我看到的问题相关.打开-Xloggc很有帮助,但是将GC日志(自应用程序启动以来使用秒数)的时间集成到我的主应用程序日志中有点棘手.
编辑2012年4月:从Java7u4开始,您可以从GarbageCollectorMXBean获取通知(一个很好的例子).
我们有一个用Java编写的低延迟交易系统(Feed处理程序,分析,订单输入).它广泛使用TCP和UDP,它不使用Infiniband或其他非标准网络.
有人可以评论各种操作系统或操作系统配置的权衡来部署这个系统吗?虽然吞吐量对于跟上现代价格源非常重要,但延迟是我们的首要任务.
Solaris似乎是一个自然的候选者,因为他们创建了Java; 我应该使用Sparc还是x64处理器?
我听说过关于RHEL和SLERT的好东西,是那些在我们的基准测试中使用的Linux版本.
有没有人针对上述操作系统测试过Windows?还是假设跟不上?
我想将Java与C++争论留给另一个线程.
我们的应用程序有~10个线程执行单独的任务(没有线程池).我们没有遇到死锁,但总是试图降低响应请求的延迟,因此我们有兴趣确定哪些锁是最有争议的.jconsole显示了线程被阻塞的频率,并且不常见,但我们仍然想知道哪些锁是最有争议的.
我们正在使用Sun JVM运行,因此来自IBM的JLA没用,我们没有在Solaris上运行,所以我们不能使用dTrace.
编辑:我想在制作中进行这种观察,其中探查器会使应用程序变得无法接受.这是一个交易系统,如果我们很慢,我们会亏钱,所以我们不会在生产中运行分析器.在性能测试中模拟我们交谈的许多交换也很困难.
我们最近完成了对组播发送性能的分析.令人高兴的是,Java和C几乎完全相同,因为我们在Windows和Solaris上测试了不同的流量发送速率.
但是,我们注意到发送多播消息的时间随着发送之间的时间的增加而增加.我们调用发送的频率越高,完成发送呼叫所需的时间就越少.
该应用程序让我们控制在调用发送之间等待的时间,低于您看到的时间随着数据包之间的延迟增加而增加.当发送1000个包/秒(1毫秒等待时间)时,调用发送只需要13微秒.在1包/秒(1000毫秒等待时间)下,该时间增加到20微秒.
Wait time (ms) us to send
0 8.67
1 12.97
10 13.06
100 18.03
1000 20.82
10000 57.20
Run Code Online (Sandbox Code Playgroud)
我们从Java和C以及Windows和Solaris上都看到了这种现象.我们正在使用Intel Pro 1000双端口网卡在戴尔1950服务器上进行测试.微基准测试很难,特别是在Java中,但我们认为这与JITing或GC无关.
我用于测试的Java代码和命令行位于:http://www.moneyandsoftware.com/2009/09/18/multicast-send-performance/
与许多log4j用户一样,我们经常进行调试级别日志记录,评估成本很高.所以我们使用以下代码保护这些案例:
if( _logger.isDebugEnabled )
_logger.debug("Interesting, my foojes are goofed up: " + getFullDetails())
Run Code Online (Sandbox Code Playgroud)
然而,这比普通的_logger.debug调用更难,有时程序员没有意识到评估可能很昂贵.
编写一个带有编译jar的程序并使用isDebugEnabled检查保护所有_logger.debug调用似乎应该相当简单.我们可能愿意接受在所有情况下检查isDebugEnabled的额外开销.
有没有人尝试过这种方法,或者对jar进行类似的后期处理?
在log4j日志记录中是否可以有微秒级别的时间戳?这是在Linux上运行Java 1.6.
我们有几个服务器紧挨着(通过LAN同步到同一个NTP服务器),我想在日志行中有微秒.
如果log4j不提供此功能,是否会进行回退?
我正在尝试测量我无法控制的服务器的延迟.这是在共同定位的环境中,因此延迟大约为500 us(.5 ms).
据我所知,思科设备经常优先考虑ICMP流量,使ping时间不可靠.有没有办法让我知道我正在穿越的装备是否就是这种情况?
我可以使用TCP确认来确定远程服务器的最小延迟吗?为此,我会以某种方式强制远程服务器在接收我的数据时立即发送TCP确认.
Java 6是否支持开箱即用的10 gig以太网?
它似乎不应该要求Java更改,但我想我记得Java 7正在增加10个gig支持.
java ×7
performance ×4
latency ×3
low-latency ×2
networking ×2
c ×1
cpu-cache ×1
ethernet ×1
jar ×1
locking ×1
log4j ×1
logback ×1
memory ×1
multicast ×1
tcp ×1