Определение виртуальной машины, выполняющей ввод / вывод на хосте Hyper-V

13

Как узнать, какая виртуальная машина отвечает за большинство операций ввода-вывода, которые отображаются в Hyper-V?

Ситуация: у меня есть хосты Hyper-V с несколькими виртуальными машинами (около 30 на хост), где я иногда вижу длительные периоды высокой загрузки диска. Я хотел бы знать, какая ВМ вызывает это.

Я попытался использовать Process Explorer, но он сообщил, что все операции ввода-вывода, связанные с Hyper-V, будут обработаны процессом «System», поэтому никакой помощи нет:

исследователь процесса

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

заместитель Wabbit
источник
@RyanRies нет, я не вижу vmwp.exe, участвующего ни в одном из операций ввода-вывода. Поскольку я не знаю, на какие диски будет загружаться нагрузка, я не могу сказать, использует ли она IDE или путь к коду SCSI, оба варианта одинаково возможны.
the-wabbit

Ответы:

9

Откройте системный монитор (запустите от имени администратора) на локальной рабочей станции. Добавьте счетчик, выберите счетчики с компьютера hyper-v, виртуального IDE-контроллера Hyper-V или виртуального устройства хранения Hyper-V, выберите счетчики и экземпляры (ВМ), если это кажется подходящим. Возможно, вам придется немного порыбачить, чтобы найти тот счетчик, который наиболее вам подходит.

Есть несколько полезных советов относительно того, какие счетчики следует искать в мониторинге производительности Hyper-V.

Крис С
источник
Я попробовал это. Это не дало полезных результатов, и я понятия не имею, почему это так. Сначала у меня возникли проблемы с поиском счетчиков виртуальных устройств хранения данных - похоже, их нет в моих установках. Поскольку большинство моих дисков - это IDE, я попробовал Virtual IDE Controller, но по непонятным причинам он не возвращает ничего, кроме нулей для экземпляра, фактически вызывающего нагрузку (на который я случайно наткнулся случайно) - тогда как другие экземпляры кажется, производят вменяемые ценности.
the-wabbit
2
Если у вас установлены средства интеграции с VM, значит, вы не используете IDE (независимо от того, что говорит экран конфигурации; не заставляйте меня начинать с плохого выбора экрана конфигурации MS), поэтому вам придется использовать счетчики Virt Stor Dev. Последние относятся к виртуальным жестким дискам, а не к виртуальной машине, так что здесь требуется немного разыменования.
Крис С
Это проясняет это. Я наконец-то нашел виртуальное устройство хранения, похоже, оно возвращает нормальные значения для виртуальных дисков.
The Wabbit
Крис С прав. Точное имя счетчика монитора производительности, на которое он ссылается, - «Виртуальное устройство хранения Hyper-V». Т.е. «Длина очереди» в этой категории дает хорошее представление о том, какие из ваших файлов VHD (X) имеют наибольшую задержку при обмене данными с вашим диском.
Коен Зомерс
2

Syneticon-dj, я написал кое-что для тебя сегодня днем. Мне показалось, что эта проблема была интересной, поэтому этот простой скрипт даст вам статистику чтения и записи для каждой запущенной виртуальной машины на хосте Hyper-V. В качестве дополнительного бонуса он связывает каждую виртуальную машину с идентификатором процесса 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); }
        }

    }
}
Райан Райс
источник
Это не ошибка, смотрите комментарии в моем ответе.
Крис С
Тогда мне интересно, почему счетчики, кажется, работают с перебоями? (Гости из Windows с полным сервисом интеграции.) И почему вместо этого они выбрали бы значительно менее полезный уровень абстракции счетчиков для каждого VHD? :(
Райан Райс
Не уверен, почему это будет показывать что-либо с перерывами. Почему именно так работает хранилище в Hyper-V. По сути, для всех виртуальных машин существует только один контроллер хранилища. Используя «IDE Controller» в конфигурации, вы просто включаете IDE Emulation для хранилища, доступного для этой виртуальной машины (в отличие от «SCSI Controller», который не имеет ничего общего с SCSI и просто отключает любой вид эмуляции контроллера хранилища) , Виртуальные машины, которые поддерживают Integration Services, просто пропускают эмуляцию IDE. Счетчики контроллера хранилища не заботятся о том, какая виртуальная машина подключена к каждому виртуальному жесткому диску, следовательно, как она работает.
Крис С
Потрясающие. Спасибо за информацию. Я очень заинтересован в том, чтобы узнать больше об этом, но мне трудно найти хорошую техническую документацию. Я думаю, что MS должен был бы демистифицировать многие из этих вещей для нас. Мы могли бы больше доверять их решениям. Я просто хочу книгу о Hyper-V Internals . Неужели я прошу так много? :)
Райан Рис
1

Оба других ответа полезны. Но я обнаружил, что гораздо легче получить то, что вы ищете (когда виртуальные жесткие диски хранятся на локальных или локально общих дисках вместо файлового сервера), открыв «Монитор ресурсов» и просмотрев вкладку «Диск». Посмотрите на «Активность диска» и отсортируйте по «Всего (B / сек)». Вы увидите виртуальные жесткие диски в порядке их активности.

Очевидно, что моя стратегия - это слабое приближение для машин, на которые вы локально вошли, что делает его менее полезным в большой, безголовой среде.

Джейк Ошинс
источник
1
Джейк, спасибо, что нашли время ответить. Я действительно люблю просто смотреть на мониторе ресурсов, однако, она недоступна , если сервер не работает полные графические установки , но только Hyper-V издание или Server Core. Что у меня есть.
the-wabbit
1

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

Показать статистику производительности гостевых виртуальных машин Hyper-V (PowerShell) https://gallery.technet.microsoft.com/Show-Hyper-V-Virtual-652fdd54

Рууд Борст
источник
0

Возможно, вы захотите попробовать сторонний инструмент, который может помочь с обнаружением виртуальной машины, которая вызывает высокий уровень ввода-вывода, а также имеет возможность оповещения о таких высоких значениях ввода-вывода. Вы можете проверить это здесь - ApexSQL VM Monitor .

Этот инструмент может контролировать большой спектр дисковых счетчиков для хоста и виртуальной машины, и помимо предопределенных счетчиков, он может быть настроен для мониторинга и отображения графического представления счетчиков с монитора производительности.

Надеюсь, я помог.

МакРоберт
источник