【问题标题】:Monitoring (network) resource utlization and performance of a windows application监视(网络)资源利用率和 Windows 应用程序的性能
【发布时间】:2009-04-15 17:54:36
【问题描述】:

我正在构建一个基于客户端-服务器的解决方案;客户端是桌面应用程序,服务器是 Web 应用程序。

基本上,我需要监控客户端的性能和资源利用率,这是一个基于 .NET 2.0 的 Windows 桌面应用程序。

我需要监控的最重要的是客户端使用的网络资源,即从客户端流出到服务器的数据的大小是多少?客户端从服务器下载的数据。

除此之外,一般的性能监控也会有所帮助。

请指导。

编辑:一些人建议使用 perfmon,但 perfmon 中显示的值不是系统范围的吗?我只需要单个应用程序的这些基于网络的统计信息...单个桌面应用程序发送和接收的字节数。

【问题讨论】:

    标签: c# .net performance networking resources


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您需要将监控分成两部分:

      • 系统如何与服务器交互(执行的调用次数)
      • 网络流量(任何呼叫的交换数据大小)

      第一部分(根据我的经验)经常被忽略,但它非常重要,因为获取新连接通常比数据流量本身更昂贵。

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

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

      如何监控这些值很大程度上取决于所涉及的技术,因为其中一些非常简单(例如,如果您使用 Web 服务,则设置 Fiddler 来监控调用并检查监控结果是非常简单),对于其他人,您需要使用像WiresharkMS Network Monitor这样的低级流量分析器,并学习如何根据服务器的IP地址、使用的端口和其他参数过滤流量。

      如果您澄清您的应用程序架构,我可以尝试更具体。

      问候 马西莫

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 根据msdn,这不仅仅是网络,不是吗?进程生成的输入/输出操作中读取的字节数,包括文件、网络和设备 I/O。
        【解决方案4】:

        看看这篇文章:http://www.codeproject.com/KB/IP/apptraffwatcher.aspx

        您也许可以拆开源代码,并获取您需要测量下载/上传应用程序进程 ID 的内容。

        看起来他使用这个库来获取有关流量的信息:http://www.codeproject.com/KB/IP/trafficwatcher.aspx

        【讨论】:

          【解决方案5】:

          我尝试了 perfmon,但我也无法查看我们的网络流量。但我能够在 Visual Studio 2005 Team 套件中的 Performance Explorer 中使用。

          如果您有团队版 Visual Studio,您可以在桌面应用程序上设置采样/仪器。然后进入会话的选项。选择事件 -> 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 数据库的所有通信。

          【讨论】:

            【解决方案6】:

            如果您使用的是 HTTP 请求,您的帖子并不清楚。您指出服务器是一个 Web 应用程序,这暗示(可能是不正确的)我可能正在使用 HTTP 协议从服务器发送/接收数据到客户端。

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

            如果您不是基于 HTTP 的,那么此工具将无济于事。

            【讨论】:

              【解决方案7】:

              我很惊讶没有人建议使用 SysInternals(现为 Microsoft)Process Explorer (technet.microsoft.com/en-us/sysinternals/bb896653.aspx)。如果您右键单击有问题的可执行文件并左键单击属性,它将弹出一个对话框。然后切换到性能选项卡,您可以监控可执行文件的 I/O。 Performance Graph 选项卡将显示随时间绘制的 CPU 使用率和 I/O 字节历史记录。这是一个很酷的免费工具。

              【讨论】:

                【解决方案8】:

                您想查看 perfmon(在开始菜单外的管理工具中也称为性能监视器)。

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

                您可以尝试使用其他网络计数器,因为它们有很多,其中一个会完全按照您的意愿行事。您还可以将 perfmon 日志保存到文件中并在之后查看它们 - 您将看到完整的图表,并且可以“放大”部分。或者,您可以仅使用原始数字保存日志样式文件。

                这里有一个quick guide,通过 perfmon 作为管理工具,一旦你明白了,剩下的就很容易了。

                在 Vista 中,您不能再添加单独的计数器,您可以添加分组在一个对象下的整组计数器 - 因此对于我的示例,您将添加网络接口对象,然后您会看到所有单独的计数器点击确定后在图表上。

                【讨论】:

                • 不是 perfmon 系统范围内显示的值吗?我只需要单个应用程序的这些基于网络的统计信息...单个桌面应用程序发送和接收的字节数。
                • 啊是的...好吧,您可以使用进程对象和应用程序实例来查看所有IO数(例如I/O数据字节);不幸的是,这也包括磁盘 IO。
                【解决方案9】:

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

                【讨论】:

                  【解决方案10】:

                  您应该查看 ACE Analyst 以了解此用例 - 将其视为 Wireshark 数据包捕获之上的超级智能层。您需要查看数据包以了解在网络上运行的应用程序行为的真实性质。

                  【讨论】:

                    猜你喜欢
                    • 2010-12-08
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多