Hyper-VホストでI / Oを実行するVMの決定


13

Hyper-Vで見られるI / OIの大部分をどのVMが担当しているかを調べるにはどうすればよいですか?

状況:多数のVM(ホストごとに約30)を備えたHyper-Vホストがあり、ディスクの使用率が高い状態が長時間続くことがあります。どのVMがこれを引き起こしているのか知りたい。

Process Explorerを使用してみましたが、Hyper-Vに関連するすべてのI / Oが「システム」プロセスによって処理されることが報告されたため、そこでは何の助けもありません。

プロセスエクスプローラー

アクセスされたファイルごとに分類することは既に役立ちます。Windows Serverの完全なGUIインストールには、この情報を提供するリソースモニターがあります。ただし、ResmonはCoreおよびHyper-Vインストールでは使用できないようです。


@RyanRiesいいえ、vmwp.exeはどのI / Oにも関係していません。どのディスクがロードされるのかわからないので、IDEを使用しているかSCSIコードを使用しているかはわかりませんが、どちらも同じように考えられます。
the-wabbit

回答:


9

ローカルワークステーションでパフォーマンスモニターを開きます(管理者として実行)。カウンターを追加し、hyper-vマシン、Hyper-V仮想IDEコントローラー、またはHyper-V仮想ストレージデバイスからカウンターを選択し、必要に応じてカウンターとインスタンス(VM)を選択します。あなたにとって最も意味のあるカウンターを見つけるには、少し釣りをしなければならないかもしれません。

Hyper-Vパフォーマンスの監視でどのカウンターを探すべきかについて、いくつかの良いヒントがあります。


うーん、私はそれを試しました。有用な結果が得られなかったため、なぜそうなのかわかりません。最初は、仮想ストレージデバイスカウンターを見つけるのに問題がありました-インストールに存在しないようです。ほとんどのディスクはIDEであるため、仮想IDEコントローラーを試してみましたが、いくつかの計り知れない理由により、実際に負荷を引き起こしているインスタンス(その間に偶然偶然につまずいた)に対してゼロ以外を返すことはありません。健全な値を生成するようです。
-wabbit

2
VM Integrationのものがインストールされている場合、IDEを使用していない(構成画面の内容に関係なく、MSの不適切な構成画面の選択を開始しないでください)ので、Virt Stor Devカウンターを使用する必要があります。後者はVMごとではなくVHDごとであるため、少しの逆参照が伴います。
クリスS

これで解消されます。私はついに仮想ストレージデバイスを見つけました。仮想ディスクの健全な値を返すようです。
the-wabbit

クリス・Sは正しい。彼が参照するパフォーマンスモニターカウンターの正確な名前は、「Hyper-V仮想ストレージデバイス」です。つまり、このカテゴリの「キューの長さ」は、どのVHD(X)ファイルがディスクとの通信で最もレイテンシーが高いかについての良い洞察を与えます。
Koenゾマーズ14年

2

Syneticon-dj、今日の午後に何か書いた。この問題はおもしろいと思ったので、この簡単なスクリプトは、Hyper-Vホスト上で実行されている各VMの読み取りおよび書き込みIO統計を提供します。追加のボーナスとして、各VMをvmwp.exeのプロセスIDに関連付けます。

GUIを必要としないため、Hyper-Vサーバーでこれを実行できます。

欠点は、これに取り組んでいる間、パフォーマンスカウンターがしばらくの間うまく機能していることに気づいたことです。おそらく、クリスSが言ったように、バグではないかもしれませんが、残念ながら、これらのカウンターは残念ながらあまり有用ではないかもしれません。とにかく、Virtを使用するようにスクリプトを変更するのは非常に簡単です。代わりにストレージデバイスカウンター。

出力は次のようになります。

PID     VMName               ReadBytesPerSec             WriteBytesPerSec
---     ------               ---------------             ----------------
5108    DC02                          483.90                            0
2796    DC01                               0                            0
3348    ECA01                     4782668.27                            0

#Requires -Version 3
function Get-VMPidAndIO
{
<#
.SYNOPSIS
    Gets the Process ID and I/O statistics of each virtual machine running on the Hyper-V host.
.DESCRIPTION
    Gets the Process ID and I/O statistics of each virtual machine running on the Hyper-V host.
    Currently only works for VMs using virtual IDE controllers.
    Requires Powershell 3 at a minimum.
.LINK
    http://myotherpcisacloud.com
.NOTES
    Written by Ryan Ries, June 2013.
    ryan@myotherpcisacloud.com
#>
    BEGIN
    {
        Try
        {
            $VMProcesses = Get-CimInstance -Query "Select ProcessId,CommandLine From Win32_Process Where Name ='vmwp.exe'" -ErrorAction Stop
        }
        Catch
        {
            Write-Error $_.Exception.Message
            Return
        }
    }
    PROCESS
    {

    }
    END
    {
        Foreach($_ In $VMProcesses) 
        {
            $VMName = $((Get-VM | Where Id -EQ $_.CommandLine.Split(' ')[-1]).Name)            
            [PSCustomObject]@{PID=$_.ProcessId;
                              VMName=$VMName; 
                              ReadBytesPerSec=[Math]::Round($(Get-Counter "\Hyper-V Virtual IDE Controller (Emulated)($VMName`:Ide Controller)\Read Bytes/sec").CounterSamples.CookedValue, 2);
                              WriteBytesPerSec=[Math]::Round($(Get-Counter "\Hyper-V Virtual IDE Controller (Emulated)($VMName`:Ide Controller)\Write Bytes/sec").CounterSamples.CookedValue, 2); }
        }

    }
}

これはバグではありません。私の回答のコメントをご覧ください。
クリスS

次に、カウンターが断続的に機能するように見えるのはなぜですか?(完全な統合サービスを備えたWindowsゲスト。)そして、VHDごとのカウンターの抽象化のかなり有用性の低いレベルを代わりに選択するのはなぜですか?:(
ライアンリース

断続的に何かを表示する理由がわかりません。理由については、Hyper-Vでのストレージの動作方法です。基本的に、すべてのVMに対応するストレージコントローラーは1つだけです。構成で「IDEコントローラー」を使用すると、そのVMに公開されているストレージのIDEエミュレーションを有効にするだけです(SCSIとは無関係で、あらゆる種類のストレージコントローラーエミュレーションを無効にする「SCSIコントローラー」とは対照的です) 。Integration ServicesをサポートするVMは、IDEエミュレーションをスキップします。ストレージコントローラーのカウンターは、各VHDにどのVMが接続されているかを正確に気にしません。
クリスS

驚くばかり。情報をありがとう。私はこれについてもっと読むことに非常に興味がありますが、良い技術文書を見つけるのに苦労しています。私たちのためにこのようなものの多くを分かりやすく説明するのは、MSの仕事だと思います。私たちは彼らのソリューションにより多くの信頼を置くことができるでしょう。Hyper-V内部の本が欲しいだけです。質問するのは多すぎるですか?:)
ライアンリース

1

他の答えは両方とも役に立ちます。しかし、 "リソースモニター"を開き、[ディスク]タブを見ると、探しているものがはるかに簡単に見つかります(VHDがファイルサーバーではなくローカルまたはローカル共有ディスクに保存されている場合)。「ディスクアクティビティ」を見て、「合計(B /秒)」で並べ替えます。アクティビティ順にVHDが一覧表示されます。

明らかに、私の戦略は、ローカルにログインしているマシンの大まかな近似であり、大きなヘッドレス環境ではあまり役に立たないものです。


1
ジェイク、対応に時間を割いてくれてありがとう。私が本当にしたいのサーバーがフルグラフィカルインストールのみでのHyper-V版またはサーバーコアを実行していない場合に、リソースモニタでちょうど見に、しかし、それは利用できません。それが私が持っているものです。
the-wabbit

1

選択したHyper-Vホストで見つかったすべてのVMのゲストパフォーマンスデータを収集するPowerShell GUIツールを作成しました。データの収集と照合は、get-counterおよびHyper-V WMI情報を使用して行われます。任意のメンバーサーバーから実行します。モジュールは不要です。これが、Hyper-VホストおよびVMのパフォーマンス問題の迅速なトラブルシューティングに役立つことを願っています。

Hyper-V仮想マシンのゲストパフォーマンス統計を表示する(PowerShell) https://gallery.technet.microsoft.com/Show-Hyper-V-Virtual-652fdd54


0

高いI / Oを引き起こしている仮想マシンを検出し、そのような高いI / Oについて警告する機能を備えたサードパーティのツールを試してみるとよいでしょう。こちらで確認できます-ApexSQL VM Monitor

このツールは、ホストおよび仮想マシンのディスクカウンターの大きなスペクターを監視でき、事前定義されたカウンターのほかに、パフォーマンスモニターからカウンターのグラフィカルな表示を監視および表示するように設定できます。

お役に立てば幸いです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.