Думаю, в Linux это можно сделать с помощью ulimit, ищу что-то подобное в Win7 x64. Проблема в том, что в некоторых случаях процесс не знает, что физическая память уже исчерпана, и продолжает выделять память, что замедляет сканирование системы, поскольку система распределяет ресурсы из файла подкачки. Единственный способ восстановить - это жесткая перезагрузка.
Спасибо
Там является в Диспетчер системных ресурсов Windows, но это применимо только к Windows Server 2008.
В общем, это НЕ хорошая идея - файл подкачки предназначен для использования. Большинство процессов не знают предела своей физической памяти, и им не нужно заботиться о них. Похоже, вам следует очистить программы, используя ресурсы, или инвестировать в больше памяти - 4 ГБ в настоящее время довольно стандартно, а чем больше, тем лучше.
Похоже, что нет собственного способа сделать это, и снова M $ обращается со своими пользователями как с некомпетентными идиотами, которым нельзя позволять выполнять задачи, которые могут фактически сделать всю систему более стабильной или производительной.
Единственный обходной путь может заключаться в том, что было предложено для запуска пакетного сценария в фоновом режиме (технически это относится к третьей стороне, поскольку сценарий написан и запускается неофициально другой стороной), но это не «ограничит» процесс как таковой, но вместо этого перезапустит процесс, когда он достигнет установленного вами максимального предела.
Вы должны учесть следующие проблемы, связанные с перезапуском скрипта:
Вы неожиданно завершите процесс, что означает, что он будет прерван в любой задаче, которую он выполнял.
Поврежденные файлы могут быть сгенерированы, если файл записывался при перезапуске процесса. Этого можно избежать, если для процесса предусмотрена собственная проверка файлов и непредвиденные обстоятельства перезаписи (например, онлайн-игры и Steam).
Другие подпроцессы и потоки также будут убиты в результате и могут распространить другие проблемы, перечисленные здесь.
Если процесс съедает оперативную память довольно быстро, перезапуск процесса может происходить слишком часто, делая процесс бесполезным (отправьте отчет о критической ошибке и прекратите использование программного обеспечения).
Хотя программный процесс испытывает непреднамеренную утечку памяти, возможно, что у процесса есть внутренняя политика поведения, когда в системе мало / заканчивается ОЗУ, например, когда она заканчивает использование файла подкачки. Если в этом случае он изменит свое поведение, чтобы уменьшить занимаемое им место, перезапуск процесса гарантирует, что он никогда не перейдет в такое «сокращенное» состояние работы.
Еще одна причина, по которой команда Linux сделала все правильно, но, увы, Windows сначала получила мировую поддержку в драйверах и играх, так что мы должны ее пережить.
Кстати, я лично испытываю МАССИВНУЮ утечку памяти в процессе Razer GameScannerService.exe, где из моих 16 ГБ памяти 1800 МГц (и моего процессора 5 ГГц) в течение нескольких минут он уже выделил почти 2 ГБ ОЗУ, и я видел, как он растет вплоть до 9 ГБ, если я позволю.
Razer ничего не делает, чтобы исправить это, несмотря на огромное количество отчетов об ошибках. Наш единственный вариант - каким-либо образом отключить службу и жить без возможности автоматического применения профилей Razer к играм или автоматического обнаружения новых устанавливаемых игр.
На Win7 откройте msconfig
, затем Boot
панель => Advanced options
=> проверить Maximum memory
и установите предел в текстовом поле под флажком => Перезагрузить. Это ограничивает общее использование памяти.
Другой способ - запустить пакетный скрипт в фоновом режиме, отслеживать использование памяти процессами и убивать его, если он съедает слишком много памяти.
У меня был нежелательный процесс (он загружает много рекламы), потребляющий слишком много памяти (всегда запускаемый другой программой, которую я часто использую). Здесь bat
скрипт я слежу и закрываю автоматически.
@echo off
set prog="XXXX.exe"
:1
SET found=1
(tasklist /FI "username eq <your username>" | find %prog% || set found=0) >nul 2>nul
if %found% EQU 1 (taskkill /f /im %prog%)
ping 0.0.0.1 -n 600 >nul 2>nul
goto 1
Пусть кто-нибудь сможет расширить его для отслеживания любого процесса.
Задание может устанавливать ограничения, такие как размер рабочего набора, приоритет процесса и ограничение времени окончания задания для каждого процесса, связанного с заданием. Если процесс, связанный с заданием, пытается увеличить размер своего рабочего набора или приоритет процесса по сравнению с лимитом, установленным заданием, вызовы функции завершаются успешно, но игнорируются. Задание также может устанавливать ограничения, которые запускают уведомление при их превышении, но позволяют продолжить выполнение задания.