Визначення VM, що робить I / O на хості Hyper-V


13

Як я можу дізнатися, який VM відповідає за більшість бачень вводу / виводу з Hyper-V?

Ситуація: у мене є хости Hyper-V з низкою VM (близько 30 на хост), де я час від часу бачу тривалі періоди високої експлуатації диска. Мені хотілося б дізнатися, який ВМ викликає це.

Я спробував використати Process Explorer, але він повідомив, що всі входи / виходи, пов'язані з Hyper-V, обробляються процесом "Система", тому допомоги там немає:

дослідник процесів

Це вже допомогло б отримати розбивку за файлами, на які можна отримати доступ. Повна інсталяція графічного інтерфейсу Windows Server має Монітор ресурсів, який надає цю інформацію. Однак, здається, Resmon недоступний в установках Core та Hyper-V.


@RyanRies ні, я не бачу, щоб vmwp.exe брав участь у жодному з вводу-виводу. Оскільки я не знаю, на які диски збирається навантаження, я не можу сказати, чи йде він IDE або шлях коду SCSI, обидва здаються однаково можливими.
ваббіт

Відповіді:


9

Відкрийте Монітор продуктивності (запустити адміністратора) на локальній робочій станції. Додайте лічильник, виберіть лічильники з гіпер-v машини, Hyper-V Virtual IDE Controller або Hyper-V Virtual Device Device Device, виберіть лічильники та екземпляри (VM), як видається доречним. Можливо, вам доведеться трохи порибалити, щоб знайти лічильник, який має для вас найбільш сенс.

Є кілька хороших підказок щодо того, які лічильники слід шукати в моніторингу продуктивності Hyper-V


Ммм, я спробував це. Це не дало корисних результатів, і я не маю поняття, чому це так. Спочатку у мене виникли проблеми з розміщенням лічильників пристроїв віртуальної пам’яті - схоже, їх немає в моїх встановленнях. Оскільки більшість моїх дисків - IDE, я дав віртуальний контролер IDE, але з якихось незрозумілих причин він не повертає нічого, окрім нулів для того, що фактично спричиняє навантаження (про що я натрапив випадково) - тоді як інші випадки здається, виробляють здорові цінності.
wabbit

2
Якщо у вас встановлено матеріал інтеграції VM, ви не використовуєте IDE (незалежно від того, що говорить екран конфігурації; не запускайте мене за допомогою неправильного вибору екрана конфігурації MS), тому вам доведеться використовувати лічильники Virt Stor Dev. Останні розраховані на VHD, а не на VM, тому дереференціювання бере участь небагато.
Chris S

Це очищає це. Нарешті я знайшов віртуальний запам'ятовуючий пристрій, здається, він повертає здорові значення для віртуальних дисків.
the wabbit

Кріс С прав. Точна назва лічильника монітора продуктивності, на який він посилається, - "Пристрій віртуального зберігання Hyper-V". Тобто "Довжина черги" в цій категорії дозволяє добре зрозуміти, який з ваших файлів VHD (X) має найбільшу затримку зв'язку з вашим диском.
Коен Зомерс

2

Syneticon-dj, я написав щось для вас сьогодні вдень. Я подумав, що ця проблема цікава, тому цей простий скрипт дасть вам змогу читати та записувати IO статистику для кожного запущеного VM на хості Hyper-V. Як додатковий бонус, він пов’язує кожен VM з ідентифікатором процесу vmwp.exe.

Ви можете запустити це на своєму сервері Hyper-V, оскільки йому не потрібен графічний інтерфейс.

Мінус полягає в тому, що, працюючи над цим, я помітив, що лічильники продуктивності працювали чудово протягом певного часу, а потім без жодної помітної причини вирішили все залишитися на нулі. Ну, можливо, це не помилка, як каже Кріс С. ... але ці лічильники, на жаль, не можуть бути дуже корисними. Незалежно від цього, було б дуже легко змінити сценарій, щоб використовувати 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); }
        }

    }
}

Це не помилка, дивіться коментарі у моїй відповіді.
Chris S

Тоді мені цікаво, чому, здається, лічильники переривчасто працюють? (Гості Windows, які мають повну інтеграцію сервісів.) І чому вони обрали б замість цього значно менш корисний рівень абстракції лічильників VHD? :(
Ryan Ries

Не впевнений, чому це буде щось переривчасто. Щодо того, чому це сховище працює в Hyper-V. По суті, є лише один контролер пам'яті для всіх віртуальних машин. Використовуючи "Контролер IDE" в конфігурації, ви просто вмикаєте IDE-емуляцію для сховища, підданого впливу цього VM (на відміну від "SCSI Controller", який не має нічого спільного з SCSI, і просто вимикає будь-яку емуляцію контролера зберігання) . Віртуальні машини, які підтримують послуги інтеграції, просто пропускають емуляцію IDE. Лічильники контролерів зберігання точно не цікавляться, який VM приєднаний до кожного VHD, отже, як він працює.
Chris S

Дивовижно. Дякую за інформацію. Мені надзвичайно цікаво читати більше про це, але мені важко скласти будь-яку хорошу технічну документацію. Я думаю, що було б MS, щоб демістифікувати багато цього матеріалу для нас. Ми могли б більше впевненості в їх рішеннях. Я просто хочу книгу Hyper-V Internals . Це занадто багато запитати? :)
Ryan Ries

1

Обидві інші відповіді корисні. Але я вважаю, що я отримую те, що ви шукаєте, набагато простіше (коли VHD зберігаються на локальних або локальних дисках замість файлового сервера), відкривши "Монітор ресурсів" і переглянувши вкладку "Диск". Подивіться на "Активність на диску" та відсортуйте за "Всього (B / сек)." Ви побачите перелічені VHD у порядку їхньої активності.

Очевидно, що моя стратегія - це слабке наближення до машин, на яких ви локально ввійшли, що робить її менш корисною у великих умовах без голови.


1
Джейку, дякую, що знайшов час для відповіді. Я дійсно люблю просто дивитися на моніторі ресурсів, проте, вона недоступна , якщо сервер не працює повні графічні установки , але тільки Hyper-V видання або Server Core. Який у мене є.
Вабіт

1

Я написав інструмент для графічного інтерфейсу PowerShell, який збирає дані про ефективність гостей для всіх VM, знайдених на вибраних хостах Hyper-V. Збір даних та узгодження даних здійснюється за допомогою лічильника get-counter та Hyper-V WMI. Запускати з будь-якого сервера-учасників, модулі не потрібні. Я сподіваюсь, що це допоможе швидко усунути проблеми з продуктивністю на хостах Hyper-V та VM.

Показати статистику продуктивності відвідувачів Hyper-V (PowerShell) https://gallery.technet.microsoft.com/Show-Hyper-V-Virtual-652fdd54


0

Ви можете спробувати сторонній інструмент, який може допомогти у виявленні віртуальної машини, яка викликає високий вхід / вивід, а також має можливість оповіщення про такі високі введення / виведення. Ви можете перевірити це тут - ApexSQL VM Monitor .

Цей інструмент може контролювати великі спектри дискових лічильників для хост-і віртуальної машини, а крім попередньо визначених лічильників, його можна налаштувати для моніторингу та показу графічного представлення лічильників з монітора продуктивності.

Сподіваюся, я допоміг.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.