Эффективное системное администрирование в Linux требует постоянной осведомленности о запущенных процессах. Будь то диагностика узких мест производительности, выявление несанкционированных задач или обеспечение работоспособности критически важных служб, команда ps aux
является незаменимым инструментом.
В этой статье представлено всестороннее описание ps aux
— от базовых концепций до продвинутых методов фильтрации, которые помогут вам извлекать полезную информацию из данных о процессах.
Предварительные условия
Чтобы следовать руководству:
- Разверните экземпляр облачного сервера Linux в Hostman
- SSH в экземпляр сервера
Понимание процессов в Linux
Прежде чем мы рассмотрим команду ps aux
, давайте разберёмся, что такое процессы в контексте системы Linux.
Что такое процессы?
Процесс — это активная программа или служба, запущенная в вашей системе Linux. Каждый раз, когда вы выполняете команду, запускаете приложение или активируете фоновую службу, вы создаёте процесс.
Linux присваивает каждому процессу уникальный идентификатор, называемый идентификатором процесса (PID). Этот PID позволяет системе эффективно отслеживать отдельные процессы и управлять ими.
Почему процессы сгруппированы в Linux?
Linux использует иерархическую структуру для организации процессов. Эта структура напоминает генеалогическое древо, где исходный процесс init
(или systemd
) выступает в качестве родителя или предка.
Все остальные процессы являются производными от этого начального процесса, образуя отношения «родитель-потомок». Такая иерархия способствует эффективному управлению процессами и распределению ресурсов.
Команда ps
Команда ps (process status «состояние процесса») предоставляет статическую сводку по активным процессам на момент выполнения. В отличие от динамических инструментов, таких как top
или htop
, которые обновляются в режиме реального времени, ps
идеально подходит для написания сценариев, ведения журналов или анализа процессов в конкретный момент времени.
ps aux
Синтаксис объединяет три ключевых параметра:
a
: Отображает процессы всех пользователей, а не только текущего пользователя.u
: Форматирует выходные данные с учетом пользовательских данных, таких как использование процессора и памяти.x
Включает процессы без подключённого терминала, такие как демоны и фоновые службы.
Эта комбинация обеспечивает беспрецедентную прозрачность работы системы, что делает её незаменимым инструментом для устранения неполадок и анализа.
Декодирование выхода ps aux
Выполнение ps aux
генерирует таблицу из 11 столбцов, каждый из которых даёт важную информацию о поведении процесса. Ниже приводится подробное описание этих столбцов:
USER
В этом столбце указывается владелец процесса. Записи варьируются от стандартных пользователей до системных учётных записей, таких как root
, mysql
, или www-data
. Мониторинг этого поля помогает обнаруживать несанкционированные процессы или определять, какие пользователи потребляют слишком много ресурсов.
PID
Идентификатор процесса (PID) — это уникальный числовой идентификатор, присваиваемый каждой задаче. Администраторы используют PID для управления процессами, например, для завершения некорректно работающего приложения с помощью kill [PID]
или изменения его приоритета с помощью renice
.
%CPU и %MEM
В этих столбцах отображается процент ресурсов ЦП и ОЗУ, используемых процессом. Значения выше 50% в любом из столбцов часто указывают на узкие места в производительности. Например, процесс базы данных, потребляющий 80% ресурсов ЦП, может указывать на неэффективные запросы или недостаточную производительность оборудования.
VSZ и RSS
VSZ (размер виртуальной памяти) обозначает общий объём виртуальной памяти, выделенной процессу, включая память, перемещённую на диск.
С другой стороны, RSS (размер резидентного набора) представляет собой объём физической памяти, активно используемой процессом.
Процесс с большим VSZ, но низким RSS может резервировать память, не используя её активно, что характерно для приложений, которые предварительно выделяют ресурсы.
TTY
В этом поле отображается терминал, связанный с процессом. Символ ?
указывает на отсутствие связи с терминалом, что характерно для фоновых служб, таких как задачи cron
или systemd-managed
.
STAT
Столбец STAT показывает состояния процесса с помощью основного символа + необязательных атрибутов:
- Первичные состояния:
-
- R: Запущен или готов к выполнению.
- S: Спит, ожидая события или сигнала.
- I: незанятый поток ядра
- D: Непрерывистый сон (обычно связан с операциями ввода-вывода).
- Z: Zombie — завершенный процесс, ожидающий удаления своим родителем.
- Ключевые атрибуты:
-
- s: Руководитель сеанса
- N: Низкий приоритет
- <: Высокий приоритет
Например, STAT
значение Ss
обозначает лидера спящего сеанса, в то время как l<
указывает бездействующий поток ядра с высоким приоритетом.
START и TIME
START — указывает время или дату начала процесса. Полезно для определения задач, которые выполняются долго.
TIME — это совокупное время, затраченное процессором с момента запуска. Процесс, работающий в течение нескольких дней с минимальным TIME
использованием, скорее всего, простаивает.
COMMAND
В этом столбце отображается команда или приложение, запустившие процесс. Он помогает определить назначение задачи — например, /usr/bin/python3
для скрипта Python или /usr/sbin/nginx
для веб-сервера Nginx.
Передовые методы фильтрации процессов
Хотя команда ps aux предоставляет множество данных, в загруженных системах её вывод может быть слишком объёмным. Ниже приведены методы, позволяющие эффективно уточнять и анализировать результаты.
Изоляция конкретных процессов
Чтобы сосредоточиться на конкретной службе, например SSH, перенаправьте вывод в grep
:
ps aux | grep sshd
Пример вывода:
root 579 0.0 0.5 15436 5512 ? Ss 2024 9:35 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups root 2090997 0.0 0.8 17456 8788 ? Ss 11:26 0:00 sshd: root@pts/0 root 2092718 0.0 0.1 4024 1960 pts/0 S+ 12:19 0:00 grep --color=auto sshd
Это отфильтрует строки, содержащие sshd
, и покажет все процессы, связанные с SSH. Чтобы исключить из результатов саму команду grep, используйте регулярное выражение:
ps aux | grep "[s]shd"
Пример вывода:
root 579 0.0 0.5 15436 5512 ? Ss 2024 9:35 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups root 2090997 0.0 0.8 17456 8788 ? Ss 11:26 0:00 sshd: root@pts/0
Сортировка по Потреблению ресурсов
Определите процессы, требующие больших затрат процессора, отсортировав выходные данные в порядке убывания:
ps aux --sort=-%cpu | head -n 10
Пример вывода:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND mysql 1734280 0.4 36.4 1325172 357284 ? Ssl Jan30 87:39 /usr/sbin/mysqld redis 1424968 0.3 0.6 136648 6240 ? Ssl Jan18 112:25 /usr/bin/redis-server 127.0.0.1:6379 root 1 0.0 0.6 165832 6824 ? Ss 2024 5:51 /lib/systemd/systemd --system --deserialize 45 root 2 0.0 0.0 0 0 ? S 2024 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? I< 2024 0:00 [rcu_gp] root 4 0.0 0.0 0 0 ? I< 2024 0:00 [rcu_par_gp] root 5 0.0 0.0 0 0 ? I< 2024 0:00 [slub_flushwq] root 6 0.0 0.0 0 0 ? I< 2024 0:00 [netns] root 8 0.0 0.0 0 0 ? I< 2024 0:00 [kworker/0:0H-events_highpri]
Аналогично, вы можете выполнить сортировку по использованию памяти, чтобы обнаружить потенциальные утечки:
ps aux --sort=-%mem | head -n 10
Пример вывода:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND mysql 1734280 0.4 36.4 1325172 357284 ? Ssl Jan30 87:39 /usr/sbin/mysqld root 330 0.0 4.4 269016 43900 ? S<s 2024 22:43 /lib/systemd/systemd-journald root 368 0.0 2.7 289316 27100 ? SLsl 2024 8:19 /sbin/multipathd -d -s root 1548462 0.0 2.5 1914688 25488 ? Ssl Jan23 2:08 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock root 1317247 0.0 1.8 1801036 17760 ? Ssl Jan14 22:24 /usr/bin/containerd root 556 0.0 1.2 30104 11956 ? Ss 2024 0:00 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers root 635 0.0 1.1 107224 11092 ? Ssl 2024 0:00 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal root 2090997 0.0 0.8 17456 8788 ? Ss 11:26 0:00 sshd: root@pts/0 root 2091033 0.0 0.8 9936 8480 pts/0 Ss 11:26 0:00 bash --rcfile /dev/fd/63
Мониторинг в режиме реального времени
Объедините ps aux
с командой watch
, чтобы обновлять выходные данные каждые 2 секунды:
watch -n 2 "ps aux --sort=-%cpu"
Это обеспечивает динамическое представление тенденций использования ЦП.
Обнаружение процесса Зомби
Зомби-процессы, хотя и в большинстве случаев безвредны, загромождают список процессов. Найдите их с помощью:
ps aux | grep 'Z'
Постоянные «зомби» часто указывают на проблемы, связанные с тем, что родительские процессы не могут очистить дочерние задачи.
Примеры практического использования
Теперь давайте рассмотрим несколько распространённых случаев использования команды ps aux
в Linux:
Диагностика Высокой загрузки процессора
Выполните следующие действия:
- Выполните эту команду, чтобы составить список процессов по потреблению ЦП.
ps aux --sort=-%cpu
- Определите виновника — например, неисправный скрипт, использующий 95% ресурсов процессора.
- Если не отвечает, завершите процесс корректно с помощью:
kill [PID]
Или насильно с:
kill -9 [PID]
Обнаружение утечек памяти
Просто выполните следующие действия:
- Сортировка процессов по использованию памяти:
ps aux --sort=-%mem
- Исследуйте задачи с аномально высокими
%MEM
значениями. - Перезапустите службу-нарушитель или обратитесь к разработчикам для оптимизации кода.
Аудит Активности Пользователя
Перечислите все процессы, принадлежащие определенному пользователю (например, Jenkins).:
ps aux | grep ^jenkins
Это помогает обеспечить соблюдение квот на ресурсы или расследовать подозрительные действия.
Лучшие практики управления процессами
Давайте теперь вкратце рассмотрим некоторые рекомендации, которые следует учитывать при управлении процессами Linux:
- Изящное завершение работы: выберите
kill [PID]
вместоkill -9
для очистки ресурсов процессами. - Моментальные снимки журнала: Периодическое сохранение списков процессов для проверок.:
ps aux > /var/log/process_audit_$(date +%F).log
- Контекстный анализ: высокое значение
%CPU
может быть нормальным для видеокодека, но тревожным для текстового редактора. Поэтому при анализе важно учитывать контекст.
Распространенные подводные камни, которых следует избегать
Вот несколько подводных камней, на которые следует обратить внимание при использовании ps aux
в Linux:
- Неверная интерпретация VSZ: высокая загрузка виртуальной памяти не всегда указывает на проблему — она включает в себя выгруженные данные.
- Переодические зомби-процессы: несмотря на то, что в большинстве случаев они безвредны, повторяющиеся зомби-процессы требуют изучения родительских процессов.
- Завершение работы критически важных служб: всегда проверяйте поле
COMMAND
перед использованием команды kill, чтобы не нарушить работу важных служб.
Заключение
Команда ps aux
является краеугольным камнем системного администрирования Linux, предоставляя подробную информацию о поведении процессов и использовании ресурсов. Вы можете диагностировать проблемы с производительностью, оптимизировать распределение ресурсов и поддерживать стабильность системы, освоив интерпретацию результатов, методы фильтрации и применение в реальных условиях.
Для дальнейшего изучения обратитесь к руководству по ps (man ps
) или интегрируйте мониторинг процессов в автоматизированные сценарии для упреждающего управления системой.