监控Windows应用程序的网络资源利用率和性能

5
我正在构建一个基于客户端-服务器的解决方案;客户端是桌面应用程序,服务器是Web应用程序。
基本上,我需要监视客户端的性能和资源利用情况,这是一个基于.NET 2.0的Windows桌面应用程序。
最重要的是,我需要监控客户端使用的网络资源,即从客户端流向服务器的数据大小以及客户端从服务器下载的数据大小。
除此之外,一般的性能监测也会有所帮助。
请指导。
编辑:一些人建议使用perfmon,但是perfmon显示的值不是系统范围内的吗?我需要针对单个应用程序的这些基于网络的统计数据...即单个桌面应用程序发送和接收的字节数。
10个回答

3

网络监控的标准工具是Wireshark。 它允许您非常灵活地过滤网络流量。 但对于您的应用程序来说,这可能会过度。 如果您正在使用纯.NET,则建议您在服务器端的网络类中添加性能日志记录-如果您正在使用.NET库类,则继承自己的类,其中添加在发送和接收数据时的统计信息。


2

2
我尝试了perfmon,但是无法观察我们的网络流量。但是在Visual Studio 2005 Team suite的Performance Explorer中可以观察到。如果你有Team版本的Visual Studio,你可以在桌面应用程序上设置Sampling/Instrumentation。然后进入会话选项,选择事件->Windows内核跟踪->网络。运行你的应用程序并让Visual Studio记录数据。然后保存报告。去命令提示符,导航到C:\Program Files\Microsoft Visual Studio 8\Team Tools\Performance Tools,并运行“vsperfreport /CALLTRACE (filename).vsp”。这将生成一个CSV文件,其中包含桌面应用程序发送/接收/大小/端口等所有网络数据包。我知道这是一个冗长的解决方案,但我刚刚在我的.Net 2.0应用程序上尝试过,并捕获了我们与Oracle Identity Manager和Oracle数据库的所有通信。

2
您需要将监控分为两部分:
  • 系统与服务器的交互方式(执行的调用次数)
  • 网络流量的数量(任何调用所交换的数据大小)

第一部分经常被忽视,但非常重要。因为获取新连接通常比数据流量本身更昂贵。

您没有告诉我们您正在使用什么类型的连接(低级tcpip调用、Web服务、WCF或其他),但我的建议是:

  • 找到一种方法来确定您的应用程序调用服务器的次数
  • 找出单个调用在数据交换方面成本是多少

如何监控这些值取决于所涉及的技术,对于某些技术来说非常简单(例如,如果您正在使用 Web 服务,则设置 Fiddler 来监视调用并检查监视结果非常简单),而对于其他技术,则需要使用低级流量分析器,如WiresharkMS Network Monitor 并学习如何根据服务器的 IP 地址、使用的端口和其他参数过滤流量。

如果您明确了应用程序架构,我可以尝试更具体地说明。

祝好, Massimo


2
您也可以使用任务管理器来完成此操作。转到进程选项卡,然后选择“查看” ->“选择列”。勾选“I/O 读取字节”和“I/O 写入字节”。然后在进程列表中找到您的程序,您就可以观察累积值了。

根据MSDN的说法,这不仅仅是网络,对吧?它包括进程生成的输入/输出操作中读取的字节数,包括文件、网络和设备I/O。 - John Lemp

1

从您的帖子中并不清楚您是否正在使用HTTP请求。您提到服务器是一个Web应用程序,这使我(也许是错误的)认为您可能正在使用HTTP协议从服务器向客户端发送/接收数据。

如果是这样,一个可能有用的工具是Fiddler。该工具将监视您的工作站中所有的HTTP流量,并且它可以(我相信)观察特定的会话和应用程序。好处在于您可以查看单个请求并查看这些请求的统计信息,包括字节输入/输出、往返时间和其他有用的信息。

如果您不是基于HTTP的,则此工具将无法帮助您。


1
我很惊讶没有人提到SysInternals(现在是微软)的Process Explorer(technet.microsoft.com/en-us/sysinternals/bb896653.aspx)。如果你右键单击所涉及的可执行文件,然后左键单击属性,它会弹出一个对话框。然后切换到性能选项卡,您可以监视可执行文件的I/O。性能图表选项卡将显示CPU使用率和I/O字节历史随时间变化的图形。这是一个很酷且免费的工具。

0
你应该查看ACE分析工具以满足这个使用案例 - 将其视为置于Wireshark数据包捕获之上的超级智能层。您需要查看数据包才能理解应用程序跨网络运行时的真实行为特征。

0

你想查看perfmon(也称开始菜单中的性能监视器)。

在默认图形视图中打开它,添加一个计数器,选择网络接口,然后选择每秒字节数(或类似的计数器),点击确定即可完成。

你可以尝试其他网络计数器,因为有很多,其中一个会完全符合你的要求。你还可以将perfmon日志保存到文件中,并在之后查看它们 - 你将看到完整的图形,并且可以“放大”某些部分。或者,你可以保存仅包含原始数字的日志样式文件。

这里有一个快速指南,介绍了perfmon作为管理员工具的使用方法,一旦你理解了这个,其他就很容易了。

在Vista中,你不能再添加单独的计数器,而是添加整个对象下分组的所有计数器 - 所以对于我的例子,你需要添加网络接口对象,然后在点击确定后,你将在图表上看到所有单独的计数器。


性能监视器中显示的值不是系统范围内的吗? 我只需要针对单个应用程序的这些基于网络的统计数据...即单个桌面应用程序发送和接收的字节数。 - Sameet
啊,是的...嗯,你可以使用进程对象和应用程序实例来查看所有IO数字(例如I/O数据字节);不幸的是,这也包括磁盘IO。 - gbjbaanb

0

如果您想将此功能集成到客户端代码库中,而不是使用外部工具,您可以使用性能计数器来访问由性能监视器、任务管理器等报告的大多数其他内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接