Menentukan VM yang melakukan I / O pada host Hyper-V

13

Bagaimana saya mengetahui VM mana yang bertanggung jawab untuk sebagian besar I / OI lihat dengan Hyper-V?

Situasi: Saya memiliki host Hyper-V dengan sejumlah VM (sekitar 30 per host) di mana saya kadang-kadang melihat periode lama penggunaan disk yang tinggi. Saya ingin tahu VM mana yang menyebabkan ini.

Saya mencoba menggunakan Process Explorer, tetapi melaporkan semua I / O terkait Hyper-V yang akan ditangani oleh proses "Sistem", jadi tidak ada bantuan di sana:

proses penjelajah

Itu sudah akan membantu untuk memiliki gangguan oleh file yang diakses. Pemasangan GUI lengkap dari Windows Server memiliki Resource Monitor yang menyediakan informasi ini. Namun, Resmon tampaknya tidak tersedia di instalasi Core dan Hyper-V.

the-wabbit
sumber
@RyanRies tidak, saya tidak melihat vmwp.exe terlibat dalam I / O. Karena saya tidak tahu disk mana yang akan dimuat, saya tidak tahu apakah itu mengambil jalur IDE atau SCSI, keduanya sepertinya sama-sama mungkin.
the-wabbit

Jawaban:

9

Buka Monitor Kinerja (jalankan sebagai Admin) di workstation lokal Anda. Tambahkan penghitung, pilih penghitung dari mesin hyper-v, Hyper-V Virtual IDE Controller atau Hyper-V Virtual Storage Device, pilih penghitung dan instance (VM) yang tampaknya sesuai. Anda mungkin harus sedikit memancing di sekitar untuk menemukan konter yang paling masuk akal bagi Anda.

Ada beberapa petunjuk bagus yang harus dicari Penghitung dalam Memantau Kinerja Hyper-V

Chris S
sumber
Mmh, saya mencobanya. Itu tidak menghasilkan hasil yang bermanfaat dan saya tidak tahu mengapa demikian. Pada awalnya, saya mengalami kesulitan menemukan penghitung Perangkat Penyimpanan Virtual - sepertinya mereka tidak ada pada instalasi saya. Karena sebagian besar disk saya adalah IDE, saya memberikan kesempatan kepada Pengendali IDE Virtual tetapi untuk beberapa alasan yang tidak terduga itu tidak mengembalikan apa pun kecuali nol untuk contoh yang sebenarnya menyebabkan beban (yang saya temukan secara tidak sengaja pada saat yang bersamaan) - sedangkan contoh lain tampaknya menghasilkan nilai-nilai waras.
the-wabbit
2
Jika Anda memiliki hal-hal yang Terintegrasi VM terinstal maka Anda tidak menggunakan IDE (terlepas dari apa yang dikatakan layar konfigurasi; jangan mulai menggunakan pilihan layar konfigurasi MS yang buruk), jadi Anda harus menggunakan penghitung Virt Stor Dev. Yang terakhir adalah per VHD, bukan per VM, jadi ada sedikit dereferencing yang terlibat.
Chris S
Ini membersihkannya. Saya akhirnya menemukan perangkat penyimpanan virtual, tampaknya mengembalikan nilai waras untuk disk virtual.
the-wabbit
Chris S benar. Nama persis penghitung monitor kinerja yang ia rujuk adalah "Perangkat Penyimpanan Virtual Hyper-V". Yaitu "Panjang antrian" dalam kategori ini memberikan wawasan yang bagus ke mana dari file VHD (X) Anda yang paling laten berkomunikasi dengan disk Anda.
Koen Zomers
2

Syneticon-dj, aku menulis sesuatu untukmu sore ini. Saya pikir masalah ini menarik, jadi skrip sederhana ini akan memberi Anda statistik baca dan tulis IO pada setiap VM yang berjalan di host Hyper-V. Sebagai bonus tambahan, ia mengaitkan setiap VM ke ID Proses vmwp.exe-nya.

Anda dapat menjalankan ini di server Hyper-V Anda, karena tidak memerlukan GUI.

Kelemahannya adalah ketika saya sedang mengerjakan ini, saya perhatikan bahwa penghitung kinerja bekerja sangat baik untuk sementara waktu, dan kemudian tanpa alasan yang jelas mereka memutuskan untuk semua tetap pada nol. Yah, mungkin itu bukan bug, seperti kata Chris S ... tapi penghitung ini sayangnya mungkin tidak terlalu berguna. Apapun itu, akan sangat mudah untuk memodifikasi skrip untuk menggunakan Virt. Sebaliknya, Penghitung Perangkat Penyimpanan.

Outputnya terlihat seperti ini:

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); }
        }

    }
}
Ryan Ries
sumber
Itu bukan bug, lihat komentar dalam jawaban saya.
Chris S
Lalu saya bertanya-tanya mengapa penghitung tampaknya bekerja sesekali? (Tamu Windows dengan layanan integrasi penuh.) Dan mengapa mereka memilih tingkat abstraksi yang secara signifikan kurang bermanfaat dari penghitung per-VHD? :(
Ryan Ries
Tidak yakin mengapa itu akan menunjukkan sesuatu secara intermiten. Adapun alasannya, itu cara penyimpanan bekerja di Hyper-V. Pada dasarnya hanya ada satu pengontrol penyimpanan untuk semua VM. Dengan menggunakan "IDE Controller" dalam konfigurasi, Anda hanya mengaktifkan IDE Emulation untuk penyimpanan yang terpapar VM itu (berbeda dengan "SCSI Controller" yang tidak ada hubungannya dengan SCSI, dan hanya menonaktifkan segala jenis emulasi pengontrol penyimpanan) . VM yang mendukung Layanan Integrasi hanya melewatkan emulasi IDE. Penghitung pengontrol penyimpanan tidak terlalu peduli VM apa yang terpasang pada setiap VHD, karenanya cara kerjanya.
Chris S
Luar biasa. Terimakasih atas infonya. Saya sangat tertarik membaca lebih banyak tentang ini, tetapi saya kesulitan menemukan dokumentasi teknis yang bagus. Saya pikir akan lebih baik jika MS menghapuskan banyak hal untuk kita. Kami akan dapat lebih percaya diri dalam solusi mereka. Saya hanya ingin buku Hyper-V Internal . Apakah itu terlalu banyak untuk ditanyakan? :)
Ryan Ries
1

Kedua jawaban lainnya bermanfaat. Tetapi saya menemukan bahwa saya mendapatkan apa yang Anda cari dengan lebih mudah (ketika VHD disimpan pada disk lokal atau yang dibagikan secara lokal alih-alih server file) dengan membuka "Resource Monitor" dan melihat pada tab Disk. Lihatlah "Aktivitas Disk" dan urutkan berdasarkan "Total (B / dtk)." Anda akan melihat VHD tercantum dalam urutan aktivitasnya.

Jelas strategi saya adalah perkiraan longgar untuk mesin yang Anda masuk secara lokal, yang membuatnya kurang berguna dalam lingkungan yang besar dan tanpa kepala.

Jake Oshins
sumber
1
Jake, terima kasih telah meluangkan waktu untuk merespons. Saya benar - benar ingin melihat monitor sumber daya, namun, tidak tersedia ketika server tidak menjalankan instalasi grafis penuh tetapi hanya edisi Hyper-V atau Server Core. Itulah yang saya miliki.
the-wabbit
1

Saya menulis alat PowerShell GUI yang mengumpulkan data kinerja Tamu untuk semua VM yang ditemukan di host Hyper-V yang dipilih. Pengumpulan dan pencocokan data dilakukan dengan informasi konter dan WMI Hyper-V. Jalankan dari server anggota mana pun, tidak perlu modul. Saya harap ini akan membantu dengan cepat memecahkan masalah kinerja pada host Hyper-V dan VM.

Tampilkan Statistik Kinerja Tamu Hyper-V Virtual Machine (PowerShell) https://gallery.technet.microsoft.com/Show-Hyper-V-Virtual-652fdd54

Ruud Borst
sumber
0

Anda mungkin ingin mencoba alat pihak ke-3 yang dapat membantu dengan mesin virtual detecintg yang menyebabkan I / O tinggi, dan juga memiliki kemampuan untuk mengingatkan pada I / O tinggi tersebut. Anda dapat memeriksanya di sini - ApexSQL VM Monitor .

Alat ini dapat memonitor momok besar penghitung disk untuk host dan mesin virtual, dan di samping penghitung yang telah ditentukan, ia dapat diatur untuk memantau dan menampilkan presentasi grafis penghitung dari monitor Kinerja.

Semoga saya bisa membantu.

McRobert
sumber