Ожидание обхода цепочки — это функция, представленная в Windows 7. Это инструмент, позволяющий определить фактический процесс, который приводит к зависанию или зависанию приложения. Windows 10/8 идет дальше и позволяет анализировать цепочку ожидания прямо из самого диспетчера задач Windows 10. Мой коллега Шьям вкратце коснулся функции обхода цепочки ожидания (WCT), которая позволяет отладчикам диагностировать зависания и взаимоблокировки приложений, рассказывая о функциях диспетчера задач Windows. Сегодня давайте разберемся с этим чуть подробнее.
Ожидание обхода цепочки
В Windows 7, монитор ресурсов предлагает возможность анализировать подождите Цепь. Пробег Resmon , чтобы открыть монитор ресурсов. Определите зависший или приостановленный процесс, вкладку «Обзор» или «ЦП» и щелкните его правой кнопкой мыши. В контекстном меню вы увидите Анализировать цепочку ожидания.
Windows 10/8 теперь позволяет анализировать цепочку ожидания прямо из Диспетчер задач Windows сам, кроме монитора ресурсов. Откройте диспетчер задач и определите зависший или зависший процесс. Щелкните его правой кнопкой мыши и выберите Проанализировать цепочку ожидания в контекстном меню.
Анализировать цепочку ожидания
Дерево Analyze Wait Chain показывает, какие процессы или открытые узлы в дереве используют или ожидают использования ресурса, используемого другим процессом или дочерними узлами в дереве, и это требуется для продолжения выбранного процесса. Обход цепочки ожидания (WCT) позволяет отладчикам Windows диагностировать зависания и взаимоблокировки приложений. Вы можете прочитать об этом подробнее на TechNet.
Открыв вкладку «Обзор» или «ЦП», вы найдете список запущенных процессов. Если процесс «завис», он будет выделен красным текстом «Не отвечает». Вы можете щелкнуть процесс правой кнопкой мыши и назначить новую задачу, включая завершение процесса.
Убить Не отвечает, завис, замороженный процесс
Если вы выберете «Анализировать цепочку ожидания», вы увидите список процессов и связанное с ними дерево процессов. Вы также можете увидеть сообщение — xyz.exe процесс ожидает другого процесса (abc.exe), чтобы привести пример. Если вы открыли диспетчер задач как администратор, вы сможете увидеть гораздо больше процессов. Если вы работаете в Windows от имени администратора, в Windows 8 уже установлены повышенные права для диспетчера задач. На следующем рисунке показано, как выглядит окно. Ни один из моих процессов мы висит достаточно долго, чтобы я смог достать его Дерево ожидания.
Теперь вы можете подождать или выбрать уничтожение процесса, но помните, когда вы завершаете любой процесс, если это системный процесс, и другие функции, зависящие от него, также могут дать сбой, поэтому вы должны быть осторожны здесь.
Кстати, Хакер процессов также поможет вам узнать, какой из ваших процессов зависает. Так будет Что такое Hang. Эта утилита пытается обнаружить зависшее программное обеспечение или процесс, и отображает некоторую информацию, которая может позволить вам разобраться и понять, что именно лежит в основе такого зависания.
- Теги: Возможности, Диспетчер задач
-
Небольшие технические трудности. В ближайшее время мы появимся в сети и сайт станет чуточку лучше
Любой компьютер как ни крути даёт сбои, как и в принципе, любая электроника. Если говорить конкретно о компьютерах, то в наверняка каждый сталкивается регулярно с его зависаниями (или отдельных его программ). Работаешь, работаешь и бамс, программа не отвечает ни на какие действия, к примеру, текст не вводится, окно не двигается. Или же бывает так, что перестаёт работать вообще всё: ни пуск не открыть, на диспетчер задач и вообще компьютер отказывается выключаться обычными способами. И если опытный пользователь компьютера на 100% знает как справиться с подобными проблемами, то новички сразу теряются и паникуют., как правило. В этой статье я расскажу об основных способах борьбы с зависаниями, при работе на компьютере.
При нормальной работе в Windows и регулярном уходе за ней, зависания если и будут проявляться, то крайне редко, чего не скажешь о случаях, когда жёсткие диски до отказа забиты хламом, имеется куча вирусов, шпионских программ, установлено множество программ (часть из которых, как правило, неизвестного происхождения и пользователи не знаю для чего они нужны) и в целом система просто не оптимизирована, т. е. за ней никто не ухаживает.
Поэтому, чтобы компьютер с системой Windows работал стабильно и зависания сводились к минимум, хотя бы раз в год нужно проводить комплексное обслуживание.
Если произошло зависание какой-то либо отдельной программы
Чаще всего, при работе за компьютером зависают именно отдельные программы. Т.е. Вы можете работать, к примеру, в Word, печатать текст и неожиданно программа может зависнуть. Это может произойти после выполнения какого-то действия, например, после сохранения проделанной работы, либо после выполнения какой-то иной операции.
Следует иметь ввиду, что в случае зависания программы, вы вряд ли уже сможете сохранить результаты проделанной в ней работы (если только она сама не отвиснет). Любой способ борьбы с зависанием программы так или иначе сводится к закрытию этой самой программы без сохранения.
Рекомендация: в какой бы программе вы не работали, сохраняйте результаты своей работы как можно чаще. Это поможет вам избежать неприятных последствий, когда придётся затем заново переделывать уйму работы, которую вы не сохранили.
Итак, если программа зависла, то:
В первую очередь попытайтесь закрыть её обычным способом, при помощи кнопки «Закрыть» в правом верхнем углу окна программы.
Наиболее часто программу всё-таки удаётся закрыть именно таким способом. Возможно вам потребуется кликнуть по кнопке закрытия программы несколько раз и подождав пару минут покликать по ней ещё. В итоге программа может либо просто закрыться, либо в начале появится окно о том, что такой-то процесс не отвечает и нужно его завершить соответствующей кнопкой.
Бывает и так, что программа ни в какую не закрывается обычной кнопкой и никаких окон о сбое в работе программы не появляется. В этом случае нужно попытаться закрыть программу через диспетчер задач Windows.
Диспетчер задач — это отдельная программа Windows, в которой отображаются все запущенные процессы (программы) и службы на компьютере, а также отображается информация по общей нагрузке на компьютер и другие функции.
Для того, чтобы открыть диспетчер задач, нажмите сочетание клавиш Ctrl + Shift + Esc (это сочетание клавиш работает во всех версиях Windows).
В версиях Windows до Windows 7 включительно, диспетчер задач будет иметь вот такой вид:
В Windows 8 и 10 диспетчер задач может открыться изначально с минимальным набором кнопок и функций:
Всё что нужно сделать, чтобы закрыть программу, это найти процесс, относящийся к ней в открывшемся диспетчере задач и завершить его.
Для Windows 7 и более ранних версий. Нужно перейти на вкладку «Процессы» (1), в списке (2) найти процесс, относящийся к зависшей программе и закрыть его, нажав «Завершить процесс» (3).
Нужный процесс в списке можно определить по столбцу «Описание» (1), где обычно указано конкретное название программы, либо иногда интуитивно понятно и по столбцу «Имя образа» (2). Например, зависшая программа Word, обычно имеет имя образа (процесс) под названием WINWORD.EXE. Браузер Mozilla Firefox имеет название процесса firefox.exe.
Для Windows 8 и 10. Ищем нужную зависшую программу в мини-окне диспетчера задач (1) и нажимаем «Снять задачу» (2):
Если вдруг зависшая программа не отображается в мини-окне диспетчера, то нажмите «Подробнее».
Откроется расширенный диспетчер задач (как в Windows 7 и более ранних версиях), где вы сможете посмотреть все запущенные на компьютере процессы и завершить нужный вам. Лучше для этого открыть вкладку «Подробности» (1), поскольку там будет столбец «Описание», где вы сможете увидеть название программы, к которой относится тот или иной процесс из столбца «Имя».
Завершение процесса через диспетчер задач должно закрыть программу. Далее вам остаётся запустить её по новой и продолжить работу.
Если не помогло не то, ни другое, то оставшийся выход — перезагрузка компьютера.
Если перезагрузку не удаётся выполнить стандартным образом, то перезагрузите компьютер при помощи кнопки на системном блоке или удерживайте около 5-10 секунд кнопку включения питания (если у вас ноутбук) и компьютер выключится.
Зависание проводника Windows (не активен рабочий стол, ярлыки, не открываются папки)
Бывает возникает следующая ситуация: неожиданно перестаёт работать проводник Windows, т. е. у вас может ничего не открываться с рабочего стола, вы не сможете открыть какую-либо папку на компьютере.
Обычно данная проблема возникает из-за подвисания процесса под названием explorer.exe.
Решение данной проблемы довольно простое:
Иногда, при зависании проводника Windows, система сама предложит вам перезапустить нужный процесс. Появится окно, в котором будет кнопка перезапуска и в этом случае проблема будет решена.
Но бывает и так, когда проводник зависает и не перезапускается сам, а Windows никак в этом не помогает. В таком случае откройте диспетчер задач (клавиши Ctrl + Shift + Esc).
В диспетчере задач найдите процесс explorer.exe. Его нужно перезапустить.
На примере Windows 7. Найдя процесс explorer.exe (1), завершите его, нажав «Завершить процесс» (2).
Как только вы завершите этот процесс, у вас пропадёт весь рабочий стол и панель задач внизу, т. е. не будет видно ни кнопки пуска, ни ярлыков на рабочем столе, ни часов в правом нижнем углу и всего остального. Потому что процесс explorer.exe за всё это отвечает и вы его завершили.
Теперь по новой запускаем закрытый процесс explorer.exe. Для этого выбираем меню «Файл» (1) > «Новая задача (Выполнить) [2]».
В открывшемся окне вводим имя процесс, который завершили explorer.exe (1) и нажимаем «ОК» (2).
Процесс должен запуститься и проводник Windows заработает.
На примере Windows 8, 10. Обычно последние версии Windows не дают окончательно зависнуть программе «Проводник», т. е., как правило, появляется окно с сообщением о сбое программы и в нём будет кнопка для перезапуска.
Но если такого окна вдруг не появилось, то открыв диспетчер задач, нажмите «Подробнее».
В списке программ (вкладка «Процессы») найдите программу «Проводник» (1), выберите её и нажмите справа внизу кнопку «Перезапустить» (2).
Теперь проводник Windows должен перезапуститься и вновь станет доступен.
В случае если не работают способы с перезапуском проводника Windows, то оставшийся выход — перезагрузка компьютера.
Если перезагрузку не удаётся выполнить стандартным образом, то перезагрузите компьютер при помощи кнопки на системном блоке или удерживайте около 5-10 секунд кнопку включения питания (если у вас ноутбук) и компьютер выключится.
Полное зависание Windows (не работает, не нажимается вообще ничего)
Порой встречаются случай с полным зависанием Windows, когда не удаётся запустить вообще никакие программы, открыть что-либо. В общем компьютер целиком «висит» 🙂 Случай тяжёлый, потому что лечится это чаще всего лишь перезагрузкой.
Если вы столкнулись с подобной проблемой, то:
Все инструкции к шагам ниже уже были описаны в главах выше.
- В первую очередь попробуйте позакрывать все открытые программы через диспетчер задач
- Попробуйте через диспетчер задач перезапустить процесс explorer.exe.
- Если ничего не помогло, перезагружайте компьютер.
Если перезагрузку не удаётся выполнить стандартным образом, то перезагрузите компьютер при помощи кнопки на системном блоке или удерживайте около 5-10 секунд кнопку включения питания (если у вас ноутбук) и компьютер выключится.
Заключение
Зависание компьютера — обычное дело и происходить может абсолютно на любом компьютере, в не зависимо от его характеристик, и на слабеньких и на мощных. Как говорилось в статье, когда система Windows регулярно обслуживается, количество разного рода зависаний сводится к минимуму, компьютер работает стабильно. Однако, если всё-таки зависание произошло, паниковать не стоит, потому что избавиться от него поможет, в крайнем случае, перезагрузка компьютера. Главное не забывайте как можно чаще сохранять свою работу в программах, иначе в случае зависания можете потерять всю не сохранённую работу!
Источник
Компьютерное железо всегда нагружается по-разному. Даже в состоянии простоя в операционной системе запущено множество процессов. Какие-то из них работают по умолчанию, другие периодически запускаются и завершаются в автоматическом режиме. Большинство из них оказывают мизерное воздействие на современные комплектующие. Но некоторые способны серьезно напрячь даже самую мощную игровую машину. Наверняка, вы замечали, что в какой-то момент ОС начинает тормозить без видимой на то причины. Если вы ничего не запускали вручную, то причина — фоновый процесс. Давайте разберем, каким способом можно выявить «виновника торжества», и как от него избавиться.
Диспетчер задач
Это системный монитор ресурсов и менеджер запуска, который предоставляет пользователю информацию о производительности компьютера и запущенных приложениях. Для того, чтобы его запустить нажмите комбинацию клавиш CTRL + SHIFT + ESC или CTRL + ALT + DEL.
Затем вы увидите все процессы, которые в данный момент активны в операционной системе. Нажав на одну из 4 основных вкладок (ЦП, память, диск, сеть), вы выполните сортировку от процесса, который потребляет большего всего определенного системного ресурса к процессу, который имеет самый скромный аппетит. Повторное нажатие на вкладе поменяет сортировку наоборот, то есть от меньшего к большему. Таким образом вы поймете, какая задача какую комплектующую нагружает.
Тормозить компьютер может процесс, который максимально загружает процессор или память. Попробуйте его завершить.
Для того, чтобы это сделать, выделите процесс и в правом нижнем углу нажмите на пункт «снять задачу». Однако в некоторых случаях процесс сразу же может возобновиться, несмотря на вашу манипуляцию. Это происходит из-за того, что за запуск этого процесса отвечает какая-то другая системная настройка. Чаще всего это определенная служба.
Диспетчер служб
Это особый системный процесс, реализующий технологию удаленного вызова процедур. То есть он может запускать какие-то задачи без ведома пользователя. Чтобы его контролировать, нажмите комбинацию клавиш WIN + R и в появившемся поле введите команду “services.msc»
Здесь вы увидите все службы, которые запущены или могут быть запущены на компьютере. Всего их насчитывается огромное множество и для их описания придется расписать не один десяток страниц. Поэтому проще найти в интернете, от какого процесса зависит определенная служба. После этого нужную службу можно будет просто выключить, найдя ее в списке, кликнув по ней два раза левой клавишей мыши и поменяв тип запуска на «отключено».
Автозагрузка
Бывает, что компьютер тормозит только после старта в течение нескольких минут, а потом приходит в норму. Это связано с процессами, которые автоматически запускаются вместе с запуском Windows. Некоторые программы автоматически прописываются в автозагрузку не оповещая при этом пользователя. Поэтому если вы часто устанавливаете какие-то утилиты, то время от времени рекомендуется проверять автозапуск. Для этого потребуется запустить всё тот же диспетчер задач и перейти в четвертую вкладку.
Здесь вы увидите весь софт, который стартует сразу после загрузки ОС. Отключить его очень просто. Для этого выберите нужную программу, нажмите на ней правой клавишей мыши и выберите пункт «отключить». Также существует ПО с расширенным функционалом от сторонних разработчиков, но мы не рекомендуем им пользоваться только ради этой функции, поскольку, на наш взгляд, встроенных возможностей в windows полностью хватает. Так зачем тогда засорять систему различными утилитами?
Читайте также:
- Как просмотреть программы в автозагрузке Windows 10, если заблокирован Диспетчер задач
- Панель задач Windows не работает. Что делать?
Во всех версиях операционной системы Windows есть специальный инструмент, с помощью которого можно легко решить практически любую проблему с зависшим приложением. Называется он «Диспетчер задач». Изначально он служил просто для мониторинга активных процессов (запущенных программ, игр) и их закрытия в случаи зависания, но сейчас это инструмент, в котором содержится множество полезной информации для пользователя.
В этой статье мы разберем только самые основные и часто используемые функции диспетчера задач операционной системы Windows 10.
Как запустить Диспетчер задач
Есть несколько способов для запуска диспетчера задач, но мы разберем наиболее простые и актуальные:
- Сочетание клавиш Ctrl + Shift + Esc;
- Сочетание клавиш Ctrl + Alt + Delete и выбор пункта «Диспетчер задач»;
- Нажать правой клавишей мышки на панель задач и выбрать пункт «Диспетчер задач».
При первом открытии диспетчер задач запустится в компактном режиме. В нем будут отображены только запущенные на компьютере программы.
Подобный функционал у диспетчера задач был еще в операционной системе Windows NT 3.1. В данном режиме можно быстро закрыть зависшую или некорректно работающую программу.
Windows 10 |
Windows NT 3.1 |
Для этого нужно просто кликнуть по ней правой кнопкой мышки и выбрать соответствующий пункт из выпадающего меню, либо просто найти зависшее приложение и нажать кнопку «снять задачу»
По мере эволюции операционной системы Windows менялся внешний вид и функционал диспетчера задач. Сейчас это не просто программа для закрытия зависших приложений, это полноценный инструмент по мониторингу, диагностике и даже настройке операционной системы.
Чтобы воспользоваться всеми функциями, нужно перейти в расширенный режим работы. Для этого необходимо нажать «Подробнее».
Начнем знакомство с панели меню диспетчера задач.
В пункте «меню файла» можно запустить новую задачу, для этого нужно написать название процесса и нажать «ОК».
Остальные вкладки меню крайне редко используются и отвечают за параметры внешнего вида и отображения диспетчера задач.
А теперь подробно разберем его расширенные возможности.
«Процессы»
Это одна из наиболее часто используемых вкладок в диспетчере задач. В данном меню отображаются все активные процессы на компьютере. Они делятся на приложения и фоновые процессы.
Приложения — это активные программы: игры, браузеры. Все приложения можно безопасно закрывать. Процессы обычно не имеют графической оболочки и работают автономно, например, система синхронизации времени или фоновое обновление для браузера Google Chrome.
В данном меню можно также наблюдать за тем, какую нагрузку на процессор оказывают приложения и процессы, сколько потребляют оперативной памяти, как воздействуют на жесткий диск, сеть и видеокарту.
Можно закрывать зависшие приложения и процессы, а так же смотреть, где располагается активная программа на жестком диске.
Для того чтобы увидеть все действия, которые можно произвести с процессом или программой, необходимо щелкнуть по ним правой кнопкой мыши.
Внешний вид вкладки, вернее количество информации, отображаемой о процессе, также можно настроить под себя. Для этого нажмите правой кнопкой мыши на любой из показателей загрузки системы и отметьте галочкой то, что нужно отображать.
Также можно настроить значения (проценты или мегабайты), в которых будет выводиться информация о воздействии приложений и процессов на оперативную память, диск и сеть.
«Производительность»
Во вкладе «Производительность» в режиме реального времени можно наблюдать за тем, какую нагрузку на компоненты системы (процессор, оперативную память, жесткий диск и SSD, сеть и видеокарту) создают запущенные программы.
Помогает в тех случаях, когда компьютер начинает тупить без видимых на то причин. Здесь сразу будет видно, какой компонент системы загружен и насколько сильно.
График загрузки процессора можно настраивать для мониторинга каждого отдельного ядра процессора, а не общей загруженности в целом.
Помимо этого, на вкладке ЦП можно узнать точную модель и другую техническую информацию о процессоре:
- базовая частота
- количество физических и логических ядер
- объем кэша
На вкладке «Память», помимо объема занятой оперативной памяти, можно узнать эффективную частоту памяти и количество разъемом на материнской плате для установки планок памяти.
В случае с видеокартой есть дополнительная возможность мониторинга температуры и потребления видеопамяти программами или играми.
«Журнал приложений»
В данной вкладке отображаются только приложения из магазина Windows, если таковые имеются, а также нагрузка, которую они оказывают на систему.
«Автозагрузка»
Очень актуальное меню. После установки программ многие из них добавляют себя в автозагрузку для запуска вместе с операционной системой. Со временем там может накопиться огромное количество программ, причем не всегда нужных. Все бы ничего, но они отъедают ресурсы процессора и оперативную память, которой и так всегда мало, и к тому же увеличивают время включения компьютера.
Чтобы отключить ненужную программу, просто кликаем правой кнопкой мышки по программе или на окошко в нижней части диспетчера, далее выбираем «Отключить».
«Пользователи»
Во вкладке «Пользователи» отображаются активные пользователи операционной системы — это те, кто вошел в свою учетную запись. Тут также можно узнать количество системных ресурсов и программы, которые они используют. Если на компьютере один пользователь, вкладка совершенно бесполезная.
«Подробности»
Вкладка «Подробности» содержит различные сведения о запущенных процессах. Она похожа на рассмотренные чуть выше «Процессы», но здесь вы найдете больше информации и все отображаемые процессы из всех учетных записей пользователей в системе.
Для получения доступа к дополнительным параметрам процесса необходимо щелкнуть по нему правой кнопкой мышки.
«Службы»
Службы операционной системы — это системные программы, которые в зависимости от назначения запускаются автоматически при запуске операционной системы или только по необходимости.
Большинство служб являются частью операционной системы Windows. Например, Центр безопасности Защитника Windows — это новое приложения для управления встроенным системным антивирусом «Защитник Windows». Также есть службы, которые являются частью установленных программ, как, например, драйвера для видеокарт AMD или Nvidia. Тот же Google Chrome, TeamViewer или Adguard при установке создают одноименную службу, которая необходима для нормального функционирования самой программы.
Не стоит заниматься отключением служб без четкого понимания того, за что они отвечают, потому что большая их часть необходима для нормальной работы операционной системы, всех ее компонентов и установленных программ.
Для получения дополнительной информации об интересующей вас службе можно воспользоваться поиском в Интернете или открыть специальное меню для администрирования служб Windows, в котором будет дано подробное описание, состояние, тип запуска и зависимость от других служб.
Если же вам мало возможностей и информации, которая предоставляется диспетчером задач, есть сторонняя утилита Process Explorer для расширенного управления всеми процессами системы.
Process Explorer
Process Explorer распространятся абсолютно бесплатно. Скачать можно с официального сайта Microsoft.
С помощью этой программы можно не только отследить какой-либо процесс, но и узнать, какие файлы и папки он использует. На экране отображаются два окна. Содержимое одного окна зависит от режима, в котором работает Process Explorer: режим дескриптора или режим DLL.
Во втором отображается список активных процессов с их иерархией. Можно посмотреть подробную информацию о каждом из них: владелец, занятая память, библиотеки, которые он использует.
Программа позволяет менять приоритеты процессов и определять, какое ядро процессора будет его выполнять.
Можно управлять потоками процессов: запускать их, останавливать или ставить на паузу. Также можно «заморозить» процесс. Process Explorer поможет распознать, к какому процессу относится запущенное окно на рабочем столе, что поможет быстро обнаружить вредоносные программы.
Участник с: 17 февраля 2013
Цель чисто ознакомительная – ознакомить с основными моментами и утилитами. Все это есть в интернете, но разбросано по разным статьям. Просто приходилось несколько раз этим заниматься, а потому имелись некоторые наброски, с которыми и решил поделиться.
Повторюсь, это небольшая часть, чтобы не теряться и иметь хоть какой то план действий для проведения анализа, что при желании всегда можно расширить, благо интернет пока работает.
Процесс – это объект, который состоит из адресного пространства памяти и набора структур данных. Процессы являются частью операционной системы.
Грубо говоря, процесс это запущенная программа или служба … но следует отметить, что работающая программа содержит один или более процессов.
Также следует отметить, что наряду с процессами есть понятие задача, которую выполняет командный процессор. Задача – это рабочая единица командного процессора. Задачи находятся на более высоком уровне, чем процессы, операционная система ничего о них не знает.
Обычно, если процесс в течение некоторого времени не отвечает на запросы, то принято это событие считать зависанием процесса.
Хотя, если быть точным, для процесса не существует понятия зависания, он не может зависнуть в понимаемом нами смысле. Вот что об этом пишут умные дяди, привожу без перевода, (буду приводить такие цитаты и в дальнейшем – отношение свое к этому высказывать не буду, пусть каждый решает сам)
Unfortunately there is no hung state for a process. Now hung can be deadlock. This is block state. The threads in the process are blocked. The other things could be live lock where the process is running but doing the same thing again and again. This process is in running state. So as you can see there is no definite hung state. As suggested you can use the top command to see if the process is using 100% CPU or lot of memory.
Но мы также будем употреблять термин зависание процесса в его обычном понимании.
Как правило к зависанию процесса приводят следующие основные причины
– нехватка оперативной памяти
– использует 100% CPU
– уход в бесконечный цикл
– блокировки
– можно отнести и дисковые операции ввода/вывода
Команда, позволяющая определить зависание процесса отсутствует. А потому чтобы выяснить, что процесс завис, необходимо задействовать целый комплекс утилит, при условии, конечно, что есть доступ к терминал-эмулятору или консоли. И конечно в результе анализа необходимо будет установить – завис процесс или не завис и установить причину этого зависания.
Привожу опять цитату умных дядей
Если процесс ничем не заблокирован (например, читает всё ему необходимое из кэша), он должен использовать до 100% CPU. Если же он в блокировке из-за IO или проблем с сетью, то нагрузка на процессор должна быть ниже, либо вообще отсутствовать.
1. А потому начинать лучше с самого простого – узнать потребление памяти, нагрузку cpu.
Для этого можно использовать простую утилиту ps
– сортировка по памяти (1-ая команда) или сортировка по нагрузке cpu (2-ая команда)
ps -eo pid,pcpu,pmem,comm | sort -r -k3 | head -5
ps -eo pid,pcpu,pmem,comm | sort -r -k2 | head -5
PS – вместо head -5 можно применить grep <PID>
Но если причина в нехватке памяти, то будут тормоза как при открытии терминала, так и ввода команды, так и при ожидании ответа при выполнении команды. В этом случае рекомендую использовать прямую связь с ядром (использовать волшебные кнопки)
ALT+SysRq+f – вызов oom_kill, чтобы убить самый жрущий процесс (действует не сразу, придется подождать несколько минут)
PS 1 – не забывем, что значение /proc/sys/kernel/sysrq должно быть равно 1.
PS 2 – рекомендую читать логи (обычно запускаю journalctl -f) – oom_kill работает хитро, если он считает, что памяти достаточно, то ни одно приложение убито не будет, просто выдаст сообщение. Привожу пример запуска в нормальном состоянии
arch kernel: sysrq: Manual OOM execution
arch kernel: Purging GPU memory, 40534 pages freed, 2198 pages still pinned.
На любителя можно использовать top, htop, atop, vmstat и др., которые позволяют узнать нагрузки памяти и процессора (некоторые позволяют узать и нагрузку на дисковые операции ввода/вывода).
2. Имеются простые способы узнать/оценить, находится процесс в зависшем состоянии или нет. Правда в поиске виновника это нам не поможет, но хотя бы прояснит немного ситуацию.
2.1 Посмотреть параметр state процесса
можно добавить это в команду ps -eo pid,state,pcpu,pmem,comm | grep <PID>
или сразу обратится к первоисточнику, из которого ps черпает эту информацию
cat /proc/<PID>/status | grep State
2.2 Есть еще два интересных параметр voluntary_ctxt_switches и nonvoluntary_ctxt_switches (показывают сколько раз процессор получал кванты CPU и отдавал назад)
cat /proc/<PID>/status | grep voluntary
Если с течением времени эти параметры не меняются, то это говорит о том, приложение зависло.
2.3 Можно узнать место в коде ядра, где зависло – узнать имя функции, которая привела процесс к состоянию спячки/ожидания.
Для этого можно использовать ту же утилиту ps, но добавив поле wchan
ps -eo pid,pcpu,pmem,comm,status,wchan | grep <PID>
или посмотреть параметр stack
cat /proc/<PID>/stack
Верхняя функция (верхушка стэка) и покажет эту функцию. Что означает эта функция, можно нагуглить.
Есть и другие ядерные вещи, но, имхо, толку от них обычным юзерам мало, нам нужно узнать хотя бы причину, намек, виновника блокировки, если это блокировка.
А потому здесь нужны более серъезные утилиты.
PS 1 – уточнение для утилиты ps в части wchan – это адрес события, которого ожидает процесс. У активного процесса эта колонка пустая.
PS 2 – можно для нахождения значений wchan использовать и такую штуку
cat /proc/<PID>/stat | ./procstat
Например, для активного нормального процесса palemoon
cat /proc/`pidof palemoon`/stat | ./procstat | grep wchan
wchan: 0
где procstat – небольшая програмка для распарсивания вывода cat /proc/<PID>/stat (имеется исходник procstat.c, который нужно скомпилить).
3. Посмотрели и убедились, что приложение зависло, далее нужно использовать другие утилиты.
Привожу опять цитату умных дядей
Есть весьма важное различие между процессом, который полностью завис, не имея вообще шанса получить квант процессора, и процессом, который постоянно просыпается из состояния ожидания и затем сразу снова засыпает (например, некая операция опроса (poll), которая постоянно завершается по таймауту, а затем процесс по ходу выполнения вызывает её снова и засыпает).
Явный признак такого состояния – 0% CPU, что означает, что процесс находится в каком-то блокирующем системном вызове, который приводит к тому, что ядро усыпляет процесс.
3.1 В этом случае рекомендуют утилиту strace (приаттачится к процессу)
или strace -c -p <PID> … или strace -i -p <PID> … или strace -p <PID> … и др.
вообщем на любителя и описывать нюансы работы утилиты strace не буду (всего не опишешь).
Только отмечу один момент – блокировки – в конце вывода будет строка типа – flock(3, LOCK_EX, что говорит о том, что файл, имеющий дескриптор 3, заблокирован.
Нужно узнать что это за файл – ls /proc/<PID>/fd , получим что то типа /tmp/file.lock
и далее находим процесс, удерживающий этот файл – lsof | grep /tmp/file.lock
3.2 Можно использовать и утилиту gdb, но для получения информативности необходимо чтобы пакет исследуемого приложения был собран с отладочной информацией. Хотя если анализировать только стэк, то можно и без отладочной информации – как правило, если трассировка стека не меняется с течением времени (достаточно несколько проверок с периодичностью в несколько минут), то приложение висит. Также на вершине стэка увидим функцию, которая к этому привела.
А вот чтобы выполнить отладку зависшего процесса, необходимо, во 1-ых, чтобы пакет был собран с отладочной информацией и, во 2-ых, иметь навык использования отладки с помощью gdb.
4. И напоследок – иногда наблюдается не зависание, как таковое, а небольшая задержка при выполнении/старте приложения (может доходить до нескольких секунд). В этом случае может помочь комбайн sysdig – описывать не буду, а даю ссылку на один из топиков, в котором был найден виновник, с использованием sysdig (там же можно найти и установку и ссылку на описание).
EDIT 1 – и, конечно, у кого появится что то новенькое, уточняющее неплохо выкладывать здесь же – пусть все будет в одном месте.
……………………………………………………………………….
Дополнение/уточнение от 05.06.2019
В части зависания можно придерживаться следующих правил (но не забывать, что бывают и исключения)
Приложение скорее всего заблокировано и ничего не делает если cpu и mem не загружены.
Приложение находится в бесконечном цикле – cpu под 100% и возможно загружена память.
Приложению не хватает памяти – сильное торможение, долгий ответ на запросы, загружена память.
ОЖИДАНИЕ – пассивное состояние процесса, процесс заблокирован (скорее всего на каком-то системном вызове), точнее, процесс не может выполняться, так как ожидает некоторого события, вероятнее всего завершения операции ввода-вывода и менее вероятно получения сообщения от другого процесса или освобождения какого-либо необходимого ему ресурса.
И если процесс висит долго, то, как правило, убить процесс не удается, так как теряется связь ядра с процессом и не срабатывают даже волшебные клавиши. Но пробовать их всеравно нужно, чтобы уточнить наличие/отсутствие связи с ядром.
Дополнение в части определения ядерного кода/функции/ или как говорят системного вызова на котором заввисли.
Вместо
cat /proc/<PID>/stack можно также использовать и cat /proc/<PID>/syscall , вывод которого покажет нам номер системного вызова – будет что то типа такого, где 7 (1-ая цифра) это номер системного вызова
7 0x7f209cbe5a40 0x4 0xffffffffffffffff 0x7f2090f56de0 0x0 0x7f2092db3e60 0x7ffe35959f10 0x7f20ada8697b
и далее узнаем название системного вызова по его номеру
grep 7 /usr/include/asm/unistd_64.h
#define __NR_poll 7
В части определения зависшего дескриптора (при использование strace) вместо
ls /proc/<PID>/fd можно использовать readlink /proc/<PID>/fd/3
И еще про волшебные кнопки – комбинация Alt+SysRq+t – выведет всю информацию о запущенных процессах и плюс стэк – будет слишком большой вывод, но возможно и пригодится (лучше использовать в паре с journalctl -f)
PS – ‘t’ – show-task-states. Will dump a list of current tasks and their information to your console.
…………………………………………………………………………………………………………………………………………………..
Уточнение от 06.12.2020
Иногда проще получить информацию о зависании процесса, используя комбинации клавищ Alt+SysRq+KEY, где KEY=f|m|t|w
f - вызов oom_kill (убъет жрущий процесс, потребуется несколько минут)
m - вся инфа о памяти
t - вся инфа о запущенных процессах
w - список всех заблокированных, ждущих окончания ввода-вывода задач
Информация с большой вероятностью запишется в journal, где ее можно проанализировать при следующей загрузке.
Но чтобы это задействовать, нужно сначала (заранее) установить значение kernel.sysrq=1, для чего прописать в файле /etc/sysctl.d/99-sysctl.conf строчку
kernel.sysrq=1
чтобы изменения вступили в силу в текущей загрузке, необходимо выполнить команду: sudo sysctl -p /etc/sysctl.d/99-sysctl.conf
Примерный анализ логов после применения комбинаций Alt+SysRq+KEY описал в этом топике
Ошибки не исчезают с опытом – они просто умнеют