Как найти процессы, поглощающие ресурсы, с помощью командной строки Linux
Ключевые выводы
- Все процессы в Linux требуют циклов ОЗУ и ЦП, что может привести к конкуренции за эти ресурсы.
- Такие инструменты, как free, top и htop, помогают выявить нехватку памяти и высокую загрузку процессора.
- Используйте такие команды, как ps и top, чтобы выявить и уничтожить нарушающие процессы и восстановить производительность системы.
Каждому фрагменту кода, работающему на вашем компьютере с Linux, требуются циклы оперативной памяти и процессора. Процесс, требующий больше, чем ему положено, замедляет другие процессы. Вот как найти виновных.
Закон о балансировании процессов и ресурсов
Циклы ОЗУ и ЦП — это конечные ресурсы. Когда код программы выполняется, формируется процесс. Наряду с процессами операционной системы существуют процессы, которые запускают среду вашего рабочего стола, а также любые команды или приложения, которые вы запускаете. Все они требуют процессорного времени и оперативной памяти.
Linux и ЦП должны управлять распределением оперативной памяти, балансировать и планировать рабочую нагрузку ЦП по ядрам и потокам, чтобы обеспечить совместное использование всех процессов.
Предполагается, что приложения пишутся так, чтобы они не монополизировали вашу машину, но иногда что-то идет не так, и процессы могут попытаться завладеть всей вашей оперативной памятью и монополизировать ваш процессор.
Именно тогда вам нужно уметь идентифицировать процесс взлетно-посадочной полосы.
Исследование интенсивного использования оперативной памяти
Linux использует свободную оперативную память в качестве кэша. Хотя может показаться, что вся ваша оперативная память используется, вероятно, это ложное впечатление. При необходимости элементы удаляются из кэша, чтобы выделить оперативную память обычным процессам.
Свободная команда
Команда free дает вам обзор использования памяти. Опция -h (человеческий) облегчает чтение вывода.
Я трижды выполнил команду в окне терминала. В другом окне терминала я запустил программу, которая запросила большой объем оперативной памяти.
free -h
free -h
free -h
Свободная оперативная память падает с угрожающей скоростью. Нам необходимо определить процесс или процессы, стоящие за этим.
Чтение /proc/meminfo
Такие инструменты, как top и htop, извлекают информацию о своей памяти из псевдофайла /proc/meminfo. Поскольку /proc/meminfo ведет себя как файл, мы можем использовать обычные утилиты, такие как cat и less, для просмотра его содержимого.
less /proc/meminfo
Вывод различается в зависимости от того, какое ядро вы используете, и архитектуры вашего процессора, но стандартные поля всегда присутствуют. Это хороший способ увидеть более детальное представление того, какой именно тип памяти занимает большую часть вашей оперативной памяти, но он не идентифицирует отдельные процессы.
Использование команды vmstat для поиска ресурсов памяти
Команда vmstat может дать нам представление об использовании виртуальной памяти с течением времени.
Чтобы увидеть четыре набора результатов с интервалом в пять секунд и значениями, указанными в МиБ, мы можем использовать эту команду:
vmstat 5 4 -S M
Использование top и htop для поиска «свиней» памяти
И top, и htop предоставляют динамическую панель системной информации с таблицей процессов, показывающей одну строку информации для каждого процесса.
Чтобы отсортировать таблицу процессов по использованию оперативной памяти, нажмите Shift+M.
Программа под названием gobble запускалась дважды. Он использует две трети оперативной памяти. Мы убьем эти два процесса.
Нажмите k, чтобы запустить функцию уничтожения.
Вверху нам нужно указать идентификатор процесса, который мы хотим уничтожить. По умолчанию функция kill будет использовать идентификатор процесса в верхней строке. Поскольку мы отсортировали таблицу по использованию оперативной памяти, мы хотим использовать именно этот идентификатор, поэтому мы можем просто нажать Enter.
Нас спрашивают, какой сигнал мы должны послать процессу. SIGKILL — это сигнал номер девять. Нам нужно ввести цифру девять, а затем еще раз нажать Enter.
Если мы повторим этот процесс дважды, оба экземпляра программы gobble будут завершены.
В хтопе очень похоже. Переместите выделенную полосу на процесс, который вы хотите убить. Нажмите k, чтобы начать процесс уничтожения. В левой части окна появится список сигналов.
Переместите небольшую полосу выделения на запись 9 SIGKILL, затем нажмите Enter.
Использование команды ps для поиска ресурсов памяти
Команда ps дает нам идентификатор процесса, а также может предоставить нам идентификатор родительского процесса. Если у вас есть много процессов, потребляющих память, которые были запущены одним и тем же родительским процессом, уничтожение родительского процесса уничтожит и его дочерние процессы.
Мы будем использовать опцию -e (каждый процесс) и опцию -o (определяемый пользователем формат вывода). В нашем выводе мы просим:
- pid: идентификатор процесса.
- ppid: идентификатор родительского процесса.
- comm: имя команды.
- %mem: процент оперативной памяти, используемый этим процессом.
- rss: размер резидентного набора. Это неподкачиваемая физическая память, использованная процессом, в килобайтах. Обратите внимание, что при этом не учитывается зарезервированная память, которая фактически не использовалась, а также не учитывается виртуальная память. Однако для поставленной задачи это вполне хороший показатель.
- %cpu: это время процессора, имевшееся на данный момент в процессе, разделенное на время работы процесса.
Сортируем по памяти. Знак минус означает обратную сортировку. Мы можем получить 10 худших нарушителей, пропустив результаты через голову.
ps -e -o pid,ppid,comm,%mem,rss,%cpu --sort=-%mem | head -10
Исследование высокой загрузки ЦП
Процедура отслеживания «пожирателей» процессора очень похожа на ту, которую мы обсуждали для «пожирателей» памяти. Нам необходимо идентифицировать процесс или процессы-нарушители и получить их идентификатор процесса.
Использование top и htop для поиска «свиней» процессора
Мы можем использовать top и htop почти точно так же, как и для отслеживания процессов, требующих нехватки памяти. По умолчанию top и htop сортируют свои таблицы процессов по столбцу %CPU. Если вы изменили столбец сортировки, вы можете нажать Shift+P (для процессора), чтобы восстановить сортировку по % ЦП.
Существует процесс, называемый сливом почти всего процессорного времени. Определив виновника, мы можем нажать k, чтобы вызвать функцию процесса уничтожения.
Использование команды mpstat для мониторинга загрузки ЦП
Вам нужно быть осторожным, когда вы убиваете процессы. Некоторые, особенно системные процессы, следует оставить в покое. Команда mpstat дает вам снимок использования ЦП для пользовательских и системных процессов.
Вам нужно будет установить mpstat на Fedora и Manjaro, но он уже установлен на нашем ПК с Ubuntu.
В Fedora вам нужно ввести:
sudo dnf install sysstat
В Манджаро команда такая:
sudo pacman -S sysstat
Мы будем использовать опцию -P all (все процессоры) и запрашивать отчеты каждые две секунды, всего пять отчетов.
mpstat -P all 2 5
Мы видим, что нагрузка на процессор идет со стороны пользователя, а не со стороны системы. Шестая строка представляет собой среднее значение пяти отчетов, которые мы запросили.
Использование ps для поиска «свиней» процессора
Мы также можем использовать ps для поиска процессов, интенсивно использующих процессор. С небольшой доработкой нашей предыдущей команды мы можем сортировать по процессору.
ps -e -o pid,ppid,comm,%mem,rss,%cpu --sort=-%cpu | head -10
Запись о ps является ложным флагом, мы знаем, что она выполнялась лишь долю секунды. Во второй строке мы видим идентификатор процесса, монополизирующего ЦП. Имея эту информацию, мы можем использовать команду top или htop или команду kill, чтобы завершить процесс.
Немного домашнего хозяйства
Большую часть времени ваш компьютер с Linux будет работать нормально, и все процессы будут работать в допустимых пределах. Если вы заметили, что ваш компьютер стал работать медленно, проверьте его с помощью этих инструментов. Вы можете обнаружить, что память или процессор разрослись.