监控工具准确性 - 调试应用程序延迟

时间:2010-09-22 21:57:29

标签: debugging networking logging tcp wireshark

我们的网络应用程序中存在延迟问题。大多数时间请求都在100毫秒内处理。但有时候,由于没有明显的原因,它可能需要几秒钟。

所以我连接了一些监控工具并查看发生了什么(Wireshark通过端口复制和Process Monitor从外部监控网络,看看本地机器上发生了什么)。

我能够匹配tcp数据包,它们通常在两个日志文件中相互之间的毫秒内。但是在一次出现时,一系列的最后一个数据包在进程监视器中被延迟了250毫秒而不是wireshark(并且正在观察由于延迟引起的应用程序的不稳定行为)。

由于Wireshark连接到另一台计算机上,我非常确定所监控的内容是准确的:所有打包的都准时到达网卡。 对于Process Monitor,我不完全确定它是如何工作的:网络数据何时被注册?它何时到达网卡?什么时候应用程序可用?当应用程序读取数据时?

在这250ms期间,还有一些其他事件正在注册,让我相信Process Monitor正确录制,并且这250ms的延迟并非由它“创建”。

有关Process Monitor行为的任何帮助,我用来解决问题的当前方法或您认为可能存在的问题都将非常感激。

1 个答案:

答案 0 :(得分:1)

选项2

也许您正在经历GC不时导致的250ms延迟(link)。您可以使用专门的CLR主机(link

准确测量GC悬浮液

选项1 - 被排除

<击> 由于您使用的是TCP,我建议您打开套接字上的NoDelay选项,以消除您在Nagle算法和延迟ACK算法之间发生冲突的可能性。如果您正在经历数据包的“批处理”,而有时数据包被“延迟”大约200毫秒,那么它可能就是问题。
可以找到对此行为的更深入解释here