2013-01-29 3 views
1

На сервере 2008 R2 я программно установить LIMIT CPU на определенный процент со следующей PowerShellустановка дросселирования процессора для каждого пользователя на сервере 2012

function Set-UserAccountCPUThrottle 
{ 
[CmdletBinding()] 
Param(
[ValidateNotNullOrEmpty()] 
[parameter(Mandatory = $true)] 
$UserNameToRestrict, 
[Parameter(Mandatory = $false)] 
[int]$CpuPercentage = 5 
) 

write-host "about to restrict user account $UserNameToRestrict to use ${CpuPercentage}% CPU" 

    try 
    {  
     $objUser = New-Object System.Security.Principal.NTAccount($UserNameToRestrict) 
     $local:ResolvedSID= $objUser.Translate([System.Security.Principal.SecurityIdentifier]).Value.trim() 
    } 
    catch 
    { 
     throw "Cannot resolve the User (or find its SID) for $UserNameToRestrict" 
    }  
$regpath = "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Quota System\${local:ResolvedSID}" 
#in creating a new key for this sid, it will remove any old item 
mkdir $regpath -Force -ErrorAction stop | out-null 
#as the old key if existing was removed by the above code, this will create a new value 
New-ItemProperty -Path $regpath -Name "CpuRateLimit" -Value $CpuPercentage -PropertyType "DWord" -Force -ErrorAction stop | out-null 

} 

Однако пока это действительно создает ключ реестра за http://technet.microsoft.com/en-us/library/ff384148(v=ws.10).aspx

он имеет нулевой эффект на сервере 2012 или Windows 8. Разве это не работает или есть новый способ сделать это на сервере 2012 года?

ответ

2

Согласно this page on TechNet, управление ресурсами не применяется, если общий объем использования ЦП больше 70%.

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

Вы не указали точно, что вы пытаетесь контролировать. Если ваша рабочая нагрузка - это RDS (виртуальные рабочие столы, настольные компьютеры на основе сеансов или программы RemoteApp), функция «FairShare» для Windows Server 2012 может быть более полезна для вас. Соответствующий фрагмент кода:.

«Fairshare ресурсов в RD Session Host В Windows Server 2012, сервер Узел сеансов удаленных рабочих столов выделяет процессор, дискового ввода/вывода и сети ввода/вывода, такие , что один пользователь не может потреблять ресурсы что отрицательно воздействует на других пользователей на том же хосте. Каждый пользователь получит «справедливую долю ». Это делается с минимальными накладными расходами, поэтому для максимальной емкости используются ресурсы центрального процессора, диска и ».

Этот фрагмент кода можно найти примерно на полпути вниз this technet page.

+0

на сервере 2008 R2, выше метод работает и не ограничивает его в процентах. мы запускаем его на тысячах серверов, иногда ограничивающих 5%, а в других случаях - 15%, и он работает безупречно. он просто не работает с 2012 годом. Спасибо за ссылки, хотя они могут привести меня в правильном направлении – klumsy

+0

Я основываю его на учетной записи пользователя с помощью этой техники. он управляет службой Windows, запущенной под этим пользователем, и эта служба также периодически генерирует исполняемый файл. который длится около 5 минут и, поскольку он регулирует его на основе пользователя, комбинация обоих этих процессов сохраняет его под x% на сервере 2008 г. r2 – klumsy

+0

выглядит так, как это связано с терминальными службами, а не с моим контекстом. Ну что ж. Еще одна вещь, чтобы проверить это дросселирование, я создаю запланированную задачу под пользователем, которая просто запускает команду powershell -command «while ($ true) {}», которая в одном ядре ядра принимает этот единственный процесс более 95% ... на сервере 2012, в то время как в 2008 году r2 с этим методом он удерживает его на уровне 5% или независимо от того, что я установил. – klumsy

Смежные вопросы