Sam*_*erg 10 java sockets nio tcp low-latency
我们的应用程序是通过Java中的TCP/IP套接字快速读取数据.我们正在使用带有非阻塞套接字和选择器的NIO库来指示读取的准备情况.平均而言,读取和处理读取数据的总处理时间是亚毫秒.然而,我们经常看到10-20毫秒的尖峰.(在Linux上运行).
使用tcpdump,我们可以看到tcpdump读取2条谨慎消息之间的时差,并将其与我们的应用程序时间进行比较.我们看到tcpdump似乎没有延迟,而应用程序可以显示20毫秒.
我们非常确定这不是GC,因为GC日志几乎没有显示Full GC,而且在JDK 6中(根据我的理解),默认GC是并行的,所以它不应该暂停应用程序线程(除非执行Full GC) .
它几乎看起来像Java的Selector.select(0)方法有一些延迟返回准备读取,因为在TCP层,数据已经可以读取(并且tcpdump正在读取它).
附加信息:在峰值负载时,我们每条消息处理大约6,000 x 150字节平均值,或每秒大约900 MB.