4

我想在网页上监控以下内容:

  • 总响应时间
  • 总字节数
  • 吞吐量(请求/秒)
  • 使用的内存
  • 硬盘空间和IO问题
  • 服务器 CPU 开销
  • 错误(按错误代码)
  • MSSQL 加载
  • IIS 错误

我托管了一个小型服务器集群用于网络托管。我需要在 ASP.NET 中创建一个硬件视图,以尽可能接近实时快照,了解正在发生的事情。

我听说过 Spiceworks 或其他完成此任务的方法。我同意这些都是很棒的工具,但我想编写代码并保持简单。

这是我想出/找到的一些现有代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication1
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string[] logicalDrives = System.Environment.GetLogicalDrives();
            //do stuff to put it in the view.
        }
        protected static string ToSizeString(double bytes)
        {
            var culture = CultureInfo.CurrentUICulture;
            const string format = "#,0.0";

            if (bytes < 1024)
                return bytes.ToString("#,0", culture);
            bytes /= 1024;
            if (bytes < 1024)
                return bytes.ToString(format, culture) + " KB";
            bytes /= 1024;
            if (bytes < 1024)
                return bytes.ToString(format, culture) + " MB";
            bytes /= 1024;
            if (bytes < 1024)
                return bytes.ToString(format, culture) + " GB";
            bytes /= 1024;
            return bytes.ToString(format, culture) + " TB";
        }
        public static string ToApproximateString(this TimeSpan time)
        {
            if (time.TotalDays > 14)
                return ((int)(time.TotalDays / 7)).ToString("#,0.0") + " weeks";
            if (14 - time.TotalDays < .75)
                return "two weeks";
            if (time.TotalDays > 1)
                return time.TotalDays.ToString("#,0.0") + " days";
            else if (time.TotalHours > 1)
                return time.TotalHours.ToString("#,0.0") + " hours";
            else if (time.TotalMinutes > 1)
                return time.TotalMinutes.ToString("#,0.0") + " minutes";
            else
                return time.TotalSeconds.ToString("#,0.0") + " seconds";
        }
    }
} 
4

3 回答 3

1

性能计数器通过System.Diagnostics.PerformanceCounter类公开。 以下是 ASP.NET 的一些性能计数器。而且,另一个方法

于 2012-07-16T03:29:18.163 回答
1

与@Sumo 所说的类似,您需要使用System.Diagnostics命名空间中的 Windows 性能计数器 (PC)。

您的问题的部分问题是您对从 PC 的角度要测量的内容有点模糊。个人电脑非常具体且非常狭窄;他们测量一个非常详细的指标。您必须将您的要求转换为您想要的特定 Windows PC。

你说你想测量:

  • 总响应时间
  • 总字节数
  • 吞吐量(请求/秒)
  • 公羊使用
  • 硬盘空间
  • IO 问题
  • 服务器 CPU 开销
  • 错误(按错误代码)
  • MSSQL 加载

您还应该参考http://technet.microsoft.com/en-us/library/cc776490(WS.10).aspx上的 Windows Technet 参考(它是 W2K3,但仍适用于 W2K8/R2)。这将为您提供您正在寻找的所有性能计数器的广泛概述和解释。

逐个运行:

  • 总响应时间

据我所知,没有列出此内容的 ASP.NET PC。而且,无论如何,它可能对您没有意义,因为 ASP.NET 还将响应您可能不关心需要多长时间的各种请求(即任何以 .axd 结尾的请求)。我在我的项目中所做的是创建一个自定义 PC,但还有其他可用的技术(例如使用自定义跟踪侦听器)。

  • 总字节数
  • 吞吐量(请求/秒)

我相信这两种情况都有 PC,尽管我认为总字节数可能列在Web 服务类别下,而吞吐量可能是 ASP.NET 类别。

  • 使用的内存

有一个内存类别,但您需要确定是否要查找工作集大小、使用的物理 RAM 等。

  • 硬盘可用空间

检查逻辑磁盘类别

  • IO 问题

这是什么意思?再次,查看可用的 PC 以查看最相关的内容。

  • 服务器 CPU 开销

您将在处理器类别下找到它

  • 错误(按错误代码)

您可以获得抛出的错误总数或抛出异常的速率,但如果您想收集 EventLog 中的条目,则需要使用命名空间EventLog中的类System.Diagnostics

  • MSSQL 加载

我没有找到 SQL Server PC 的参考概述,但 Brent Ozar 是一位专家,他有一个 PC 列表可供查看:http ://www.brentozar.com/archive/2006/12/dba-101 -using-perfmon-for-sql-performance-tuning/。对于 SQL Server 2008/R2,此列表可能没有太大变化。

注意事项

  • 您可能需要确保已将运行 Web 应用程序的应用程序池的标识添加到计算机的名为 Windows 性能监视器用户的用户组中。
  • 您只需要打开您的柜台进行只读访问。
  • 性能计数器是组件,因此实现IDisposable. 确保您.Dispose()使用它们(或者,更好的是,使用using()语句)。
  • 使用该.NextValue()方法获取您的值;几乎从不需要使用.RawValueor .NextSample()

我不会给你每个计数器的确切名称,因为你真正了解每个计数器测量什么以及它对你有多大用处是非常重要的,只有你才能回答这个问题。实验。

于 2012-07-20T01:17:01.733 回答
0

我建议使用诸如New Relic之类的分析服务。.Net 使用页面在这里New Relic for .Net

于 2012-07-16T02:31:29.563 回答