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

Завершить работу службы Windows в зависимости от нагрузки

Мне было интересно, есть ли какие-либо бесплатные решения с открытым исходным кодом, которые будут запускать и останавливать службу Windows в зависимости от нагрузки? У меня есть некоторые службы подписки pubsub, которые выполняют фоновую работу, что не является критичным. В идеале я хотел бы иметь возможность автоматизировать вещи, чтобы эти службы могли запускаться, если память / процессор / дисковый ввод-вывод находились ниже определенного порога, и корректно останавливаться, если этот порог был достигнут. Вы знаете какие-нибудь решения? Спасибо, JP

В Windows встроено программное обеспечение, которое делает это, называемое Диспетчер системных ресурсов Windows (WSRM) он будет делать то, что вы хотите, то есть приоритеты служб на основе ресурсов.

Очевидно, не с открытым исходным кодом, но поставляется с ОС.

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

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

Вы можете настроить предупреждение, которое может запускаться с фиксированным порогом (скажем, CPU> = 75). Чтобы настроить предупреждение в Windows, вот ссылка http://support.microsoft.com/kb/324752

Таким образом, вы можете настроить предупреждение для условия Использование ЦП> = 75% и в качестве командной строки вы можете использовать

      net stop svcName 

Это останавливает службу svcName.

У вас может быть другое предупреждение, определенное для противоположного использования ЦП <70%, и в качестве командной строки вы можете использовать

      net start svcName 

когда вы опускаетесь ниже порога.

Я оставил 5% запаса между включением и выключением, хотя вы можете создать командный файл, чтобы слишком часто откладывать запуск и остановку службы.

Надеюсь это поможет