web-dev-qa-db-ja.com

VM Hyper-VホストでI / Oを実行していることを確認する

どのVMが、Hyper-Vで表示されるI/Oの大部分の原因であるかを確認するにはどうすればよいですか?

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

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

process Explorer

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

13
the-wabbit

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

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

9
Chris S

Syneticon-dj、今日の午後にあなたのために何か書いた。この問題は興味深いと思ったので、この簡単なスクリプトは、Hyper-Vホストで実行中の各IO統計の読み取りVMです。追加のボーナスは、各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.
    [email protected]
#>
    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); }
        }

    }
}
2
Ryan Ries

選択した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

1
Ruud Borst

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

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

1
Jake Oshins

高いI/Oを引き起こしている仮想マシンの検出に役立つサードパーティのツールを試してみてください。また、そのような高いI/Oについて警告する機能もあります。ここで確認できます- ApexSQL VM Monitor

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

私が助けてくれたことを願っています。

0
McRobert