Бывает так, что некий процесс (пользовательский) запускает настолько мощные вычисления, что система становиться совершенно "неповоротливой" (на данный момент это Windows7, P4, 2Gb).
В моем случае, как правило, это мои разработки в которые вкрадывается ошибки приводящие к бесконечным циклам, сложнейшим вычислениям (некорректные регулярные выражения например) и т.п.
Бывает, что попадаются и сторонние приложения с таким "наглым" поведением (я не говорю об играх сейчас).
В этих случаях мне, чаще всего хочется завершить этот процесс. НО. Диспетчер задач надо очень долго ждать. Не всегда под рукой cmd.exe (на даже тогда tasklist/taskkill может надолго "зависнуть"), и терпенья не хватает — hard reset. Понятно, что такой reset может потенциально привести к проблемам. Не говоря о потерянной (вероятность не нулевая) получасовой работе (а может и больше).
В качестве превентивных мер написал резидента, который по хоткею стартует cmd.exe (для taskkill). Но и taskkill иногда наглухо "зависает". Был прецедент: ждал ~3 часа, потом надоело. При этом — explorer еле-еле работал, но все запросы на создание процессов (task manager, taskkill, cmd.exe..) "зависали".
Вопрос, существует ли в системах Windows защита (настраиваемая) от такого поведения (захвата ресурсов процессора/памяти/...)? Чтобы у меня был реальный шанс принять меры для защиты работы системы от нежелательного процесса.
И, еще один вопрос: я полагаю многоядерные системы в этом отношении должны быть на высоте, я прав?
Здравствуйте, Аноним, Вы писали:
А>Всем привет.
А>Бывает так, что некий процесс (пользовательский) запускает настолько мощные вычисления, что система становиться совершенно "неповоротливой" (на данный момент это Windows7, P4, 2Gb). А>В моем случае, как правило, это мои разработки в которые вкрадывается ошибки приводящие к бесконечным циклам, сложнейшим вычислениям (некорректные регулярные выражения например) и т.п. А>Бывает, что попадаются и сторонние приложения с таким "наглым" поведением (я не говорю об играх сейчас).
А>В этих случаях мне, чаще всего хочется завершить этот процесс. НО. Диспетчер задач надо очень долго ждать. Не всегда под рукой cmd.exe (на даже тогда tasklist/taskkill может надолго "зависнуть"), и терпенья не хватает — hard reset. Понятно, что такой reset может потенциально привести к проблемам. Не говоря о потерянной (вероятность не нулевая) получасовой работе (а может и больше).
А>В качестве превентивных мер написал резидента, который по хоткею стартует cmd.exe (для taskkill). Но и taskkill иногда наглухо "зависает". Был прецедент: ждал ~3 часа, потом надоело. При этом — explorer еле-еле работал, но все запросы на создание процессов (task manager, taskkill, cmd.exe..) "зависали".
А>Вопрос, существует ли в системах Windows защита (настраиваемая) от такого поведения (захвата ресурсов процессора/памяти/...)? Чтобы у меня был реальный шанс принять меры для защиты работы системы от нежелательного процесса.
А>И, еще один вопрос: я полагаю многоядерные системы в этом отношении должны быть на высоте, я прав?
Ну на вскидку. У Windows Server есть WSRM.
Но это у Windows Server (да еще и Enterprise).
Еще, как вариант, можно запустить cmd.exe с повышенным приоритетом — хотя при агрессивном свопировании или отъедании процессора это, скорее всего, не поможет.
Ну и если система многоядерная, то можно поиграться с Process Affinity — попробовать выделить одно ядро на критичные задачи, например.
В NT, Если cmd/taskkill/taskman запускается с классом приоритета REALTIME_PRIORITY_CLASS (в принципе даже неважно с каким уровнем приоритета внутри этого класса), то ни свопирование, ни загрузка всех ядер "обычной" задачей ему не помешают. Вероятно, для этого какой-то специальный сервис городить надо, стандартных средств для такого я не могу придумать.
А вот если "нехорошая" задача тоже знает о приоритетах, то она может сделать так , что больше вообще никто никогда не запустится.
З.Ы. Кстати, отсюда мораль -- под администратором работать плохо. А обычным пользователям REALTIME_PRIORITY_CLASS не дается.