Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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

    }
}

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

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

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

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

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

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

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