Эффективное системное администрирование в Linux требует постоянной осведомленности о запущенных процессах. Будь то диагностика узких мест производительности, выявление несанкционированных задач или обеспечение работоспособности критически важных служб, команда ps aux
является незаменимым инструментом.
В этой статье представлено всестороннее описание ps aux
— от базовых концепций до продвинутых методов фильтрации, которые помогут вам извлекать полезную информацию из данных о процессах.
Чтобы следовать руководству:
Прежде чем мы рассмотрим команду ps aux
, давайте разберёмся, что такое процессы в контексте системы Linux.
Процесс — это активная программа или служба, запущенная в вашей системе Linux. Каждый раз, когда вы выполняете команду, запускаете приложение или активируете фоновую службу, вы создаёте процесс.
Linux присваивает каждому процессу уникальный идентификатор, называемый идентификатором процесса (PID). Этот PID позволяет системе эффективно отслеживать отдельные процессы и управлять ими.
Linux использует иерархическую структуру для организации процессов. Эта структура напоминает генеалогическое древо, где исходный процесс init
(или systemd
) выступает в качестве родителя или предка.
Все остальные процессы являются производными от этого начального процесса, образуя отношения «родитель-потомок». Такая иерархия способствует эффективному управлению процессами и распределению ресурсов.
Команда ps (process status «состояние процесса») предоставляет статическую сводку по активным процессам на момент выполнения. В отличие от динамических инструментов, таких как top
или htop
, которые обновляются в режиме реального времени, ps
идеально подходит для написания сценариев, ведения журналов или анализа процессов в конкретный момент времени.
ps aux
Синтаксис объединяет три ключевых параметра:
a
: Отображает процессы всех пользователей, а не только текущего пользователя.u
: Форматирует выходные данные с учетом пользовательских данных, таких как использование процессора и памяти.x
Включает процессы без подключённого терминала, такие как демоны и фоновые службы.
Эта комбинация обеспечивает беспрецедентную прозрачность работы системы, что делает её незаменимым инструментом для устранения неполадок и анализа.
Выполнение ps aux
генерирует таблицу из 11 столбцов, каждый из которых даёт важную информацию о поведении процесса. Ниже приводится подробное описание этих столбцов:
В этом столбце указывается владелец процесса. Записи варьируются от стандартных пользователей до системных учётных записей, таких как root
, mysql
, или www-data
. Мониторинг этого поля помогает обнаруживать несанкционированные процессы или определять, какие пользователи потребляют слишком много ресурсов.
Идентификатор процесса (PID) — это уникальный числовой идентификатор, присваиваемый каждой задаче. Администраторы используют PID для управления процессами, например, для завершения некорректно работающего приложения с помощью kill [PID]
или изменения его приоритета с помощью renice
.
В этих столбцах отображается процент ресурсов ЦП и ОЗУ, используемых процессом. Значения выше 50% в любом из столбцов часто указывают на узкие места в производительности. Например, процесс базы данных, потребляющий 80% ресурсов ЦП, может указывать на неэффективные запросы или недостаточную производительность оборудования.
VSZ (размер виртуальной памяти) обозначает общий объём виртуальной памяти, выделенной процессу, включая память, перемещённую на диск.
С другой стороны, RSS (размер резидентного набора) представляет собой объём физической памяти, активно используемой процессом.
Процесс с большим VSZ, но низким RSS может резервировать память, не используя её активно, что характерно для приложений, которые предварительно выделяют ресурсы.
В этом поле отображается терминал, связанный с процессом. Символ ?
указывает на отсутствие связи с терминалом, что характерно для фоновых служб, таких как задачи cron
или systemd-managed
.
Столбец STAT показывает состояния процесса с помощью основного символа + необязательных атрибутов:
Например, STAT
значение Ss
обозначает лидера спящего сеанса, в то время как l<
указывает бездействующий поток ядра с высоким приоритетом.
START — указывает время или дату начала процесса. Полезно для определения задач, которые выполняются долго.
TIME — это совокупное время, затраченное процессором с момента запуска. Процесс, работающий в течение нескольких дней с минимальным TIME
использованием, скорее всего, простаивает.
В этом столбце отображается команда или приложение, запустившие процесс. Он помогает определить назначение задачи — например, /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
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:
COMMAND
перед использованием команды kill, чтобы не нарушить работу важных служб.
Команда ps aux
является краеугольным камнем системного администрирования Linux, предоставляя подробную информацию о поведении процессов и использовании ресурсов. Вы можете диагностировать проблемы с производительностью, оптимизировать распределение ресурсов и поддерживать стабильность системы, освоив интерпретацию результатов, методы фильтрации и применение в реальных условиях.
Для дальнейшего изучения обратитесь к руководству по ps (man ps
) или интегрируйте мониторинг процессов в автоматизированные сценарии для упреждающего управления системой.