понедельник, 15 марта 2010 г.

Как найти машины с лимитами / резервами ресурсов?

Бывает, случайно выставляется лимит той или иной машине, а то и вовсе шаблону (все развернутые из шаблона машины унаследуют и лимиты). В итоге это может привести к необъяснимым порой проблемам с производительностью. Вот у нас 10 виртуальных машин - не сложно и прямо так посмотреть, покликав мышкой в vSphere клиенте, но что делать, если машин уже более 100?



Спасет PowerShell:
get-vm | %{Get-View $_.ID} | %{
  if(($_.Config.CpuAllocation.Limit -ne -1) -or ($_.Config.MemoryAllocation.Limit -ne -1)){
    Write-Host "VM name: " $_.Name
    write-host " CPU shares: " $_.Config.CpuAllocation.Shares.Level
    if($_.Config.CpuAllocation.Limit -eq -1){
      write-host " CPU limit: unlimited"
    }
    else{
      write-host " CPU limit: " $_.Config.CpuAllocation.Limit
    }

    Write-Host " Memory shares: " $_.Config.MemoryAllocation.Shares.Level
    if($_.Config.MemoryAllocation.Limit -eq -1){
      write-host " Memory limit: unlimited"
    }
    else{
      write-host " Memory limit: " $_.Config.CpuAllocation.Limit
    }
  }
}
И еще один скрипт, чтобы массово снять лимиты:
get-vm | %{Get-View $_.ID} | %{
  if(($_.Config.CpuAllocation.Limit -ne -1) -or ($_.Config.MemoryAllocation.Limit -ne -1)){
    Write "VM name: " $_.Name
    write " CPU limit: " $_.Config.CpuAllocation.Limit
    write " Memory limit: " $_.Config.MemoryAllocation.Limit

    $spec = new-object VMware.Vim.VirtualMachineConfigSpec;
    $spec.memoryAllocation = New-Object VMware.Vim.ResourceAllocationInfo;
    $spec.memoryAllocation.Limit = -1;
    $spec.CPUAllocation = New-Object VMware.Vim.ResourceAllocationInfo;
    $spec.CpuAllocation.Limit = -1;
    Get-View($_.ReconfigVM_Task($spec))
  }
}

С резервами ресурсов ничуть не сложнее:
get-vm | %{Get-View $_.ID} | %{
  if(($_.Config.CpuAllocation.Reservation -ne 0) -or ($_.Config.MemoryAllocation.Reservation -ne 0)){
    Write-Host "VM name: " $_.Name
    write-host " CPU reserve:    " $_.Config.CPUAllocation.Reservation
    write-host " Memory reserve: " $_.Config.MemoryAllocation.Reservation
  }
}

2 комментария:

  1. А как этим пользоваться?

    ОтветитьУдалить
  2. Надо установить VMware PowerCLI - http://communities.vmware.com/community/vmtn/vsphere/automationtools/powercli

    ОтветитьУдалить