首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于asp.net网页的Web服务器监控

基于asp.net网页的Web服务器监控
EN

Stack Overflow用户
提问于 2012-07-03 19:06:03
回答 3查看 2.1K关注 0票数 4

我想在网页上监测以下情况:

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

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

我听说过Spiceworks或其他完成这项任务的方法。我同意这些都是很好的工具,但我想对其进行编码,并保持简单。

下面是我提出/找到的一些现有代码:

代码语言:javascript
运行
复制
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";
        }
    }
} 
EN

回答 3

Stack Overflow用户

发布于 2012-07-16 03:29:18

性能计数器通过System.Diagnostics.PerformanceCounter类公开。这里是ASP.NET的一些性能计数器,还有另一个如何.

票数 1
EN

Stack Overflow用户

发布于 2012-07-20 01:17:01

与@Sumo所说的类似,您需要使用来自System.Diagnostics命名空间的(PC)。

你的问题的一部分是,你对你想从个人电脑的角度来衡量什么有点模糊。个人电脑是非常具体和非常狭窄的,他们测量一个非常详细的度量。您将不得不将您的需求转换到您想要的特定Windows PC。

你说过你想测量:

  • 总响应时间
  • 总字节
  • 吞吐量(reqs/秒)
  • 拉姆用
  • 硬盘空间
  • IO问题
  • 服务器CPU开销
  • 错误(按错误代码)
  • MSSQL负载

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

每一个都要跑下去:

  • 总响应时间

据我所知,没有任何ASP.NET个人电脑列出这一点。而且,不管怎么说,这对您可能没有任何意义,因为ASP.NET还将响应各种各样的请求,您可能并不关心这些请求需要多长时间(即以.axd结尾的任何请求)。我在项目中所做的是创建一个自定义PC,但还有其他可用的技术(比如使用自定义跟踪侦听器)。

  • 总字节
  • 吞吐量(reqs/秒)

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

  • 拉姆用

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

  • 硬盘自由空间

检查LogicalDisk类别

  • IO问题

这是什么意思?再次,审查现有的个人电脑,看看什么似乎是最相关的。

  • 服务器CPU开销

您将在处理器类别下找到这一点。

  • 错误(按错误代码)

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

  • MSSQL负载

我没有找到Server的参考概述,但是布伦特·奥扎尔是一位专家,他在这里有一个个人电脑列表:http://www.brentozar.com/archive/2006/12/dba-101-using-perfmon-for-sql-performance-tuning/。对于Server 2008/R2,此列表不太可能发生太大变化。

注意到

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

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

票数 1
EN

Stack Overflow用户

发布于 2012-07-16 02:31:29

我建议使用像新遗物这样的分析服务。关于.Net使用的页面在这里,.Net的新遗物

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11317498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档