Как мне узнать, какая виртуальная машина отвечает за большинство операций ввода-вывода, которые я вижу в 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.
Этот инструмент может отслеживать большой спектр дисковых счетчиков для хоста и виртуальной машины, и, помимо предопределенных счетчиков, его можно настроить для мониторинга и отображения графического представления счетчиков из монитора производительности.
Надеюсь, я помог.