4

Webページで次のことを監視したいと思います。

  • 合計応答時間
  • 合計バイト数
  • スループット(リクエスト/秒)
  • 使用されるRAM
  • ハードドライブのスペースと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 の観点から何を測定したいのかについて、あなたが少し曖昧であることです。PC は非常に特殊で非常に狭いものです。1 つの非常に詳細な指標を測定します。要件を、必要な特定の 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使用

メモリカテゴリがありますが、ワーキング セットのサイズ、使用されている物理 RAM などを探しているかどうかを判断する必要があります。

  • ハードドライブの空き容量

LogicalDiskカテゴリを確認する

  • 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 アプリケーションを実行しているアプリケーション プールの ID が、Windows Performance Monitor Users というコンピューターのユーザー グループに追加されていることを確認する必要がある場合があります。
  • 読み取り専用アクセスのためにカウンターを開くだけで済みます。
  • パフォーマンス カウンターはコンポーネントであるため、実装し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 に答える