> Полный список статей есть в [llms.txt](https://docs.f3cloud.com/llms.txt). Markdown-версия есть у каждой страницы, достаточно добавить .md к её адресу. Эта страница в Markdown: [https://docs.f3cloud.com/ru/linux/linux-processes.md](https://docs.f3cloud.com/ru/linux/linux-processes.md).

# Процессы и нагрузка в Linux – команды top, htop, ps и kill

Как посмотреть процессы и нагрузку на Linux-сервере. Что такое load average и как его читать, команды top, htop и ps, поиск процесса, который нагружает процессор или память, завершение процессов командами kill и pkill. Проверено на Debian 12.

Сервер вдруг стал медленно отвечать, сайт открывается через раз, а графики в личном кабинете показывают процессор под потолком. Чтобы понять, что происходит, нужно посмотреть, какие программы сейчас работают и сколько ресурсов они забирают. В этой статье разберём, что означает нагрузка на сервер и как читать load average, научимся пользоваться командами `top`, `htop` и `ps`, найдём процесс, который нагружает систему, и завершим его. Для наглядности мы нагрузили тестовый сервер с 4 ядрами двумя процессами, каждый из которых занимал одно ядро целиком, и все скриншоты сделаны в этот момент.

***

## Что такое процесс и как читать нагрузку

Каждая запущенная программа в Linux работает как **процесс**. У процесса есть номер **PID**, пользователь, от имени которого он запущен, и состояние. Большую часть времени почти все процессы на сервере спят. Веб-сервер ждёт новых соединений, база данных ждёт запросов, и процессор им в этот момент не нужен. Процессор занимают только процессы в состоянии **R** (running), которые прямо сейчас что-то вычисляют или стоят в очереди на вычисление. Именно их количество и лежит в основе самого известного показателя нагрузки.

Этот показатель называется **load average** и выводится тремя числами, например `2.24, 1.03, 0.50`. Это средняя длина очереди процессов, которым нужен процессор, за последние 1, 5 и 15 минут. Linux добавляет к ним ещё процессы, которые ждут завершения операции с диском и не могут быть прерваны, поэтому load average растёт и при медленном диске, даже если процессор свободен. Сам по себе load average ничего не говорит, пока не сравнить его с количеством ядер. Предположим, что на сервере 4 ядра. Нагрузка 2 означает, что в среднем работали два процесса и половина ядер простаивала. Нагрузка 4 означает, что все ядра заняты полностью, а нагрузка 8 означает, что на каждое ядро приходится два желающих и процессы стоят в очереди, поэтому всё начинает отвечать медленнее. На нашем тестовом сервере два процесса, каждый из которых занимал по ядру, дали через пару минут load average 2,24 при 4 ядрах.

Три числа полезно читать вместе, потому что они показывают направление. Если первое число заметно больше третьего, нагрузка выросла недавно и, возможно, ещё растёт. Если первое меньше третьего, пик уже прошёл. Количество ядер сервера показывает команда `nproc`.

Кроме нагрузки, у процессора есть разбивка времени, которую показывает `top`. Значение **us** это время, потраченное на программы, **sy** на работу ядра системы, **id** это простой, **wa** ожидание диска. Для виртуального сервера важен ещё показатель **st** (steal). Он показывает долю времени, когда сервер был готов работать, но физический процессор был занят другими задачами. На нашем тестовом сервере он был равен нулю.

***

## 1. Посмотрите общую нагрузку

Самая быстрая проверка это команда `uptime`. Она покажет, сколько сервер работает без перезагрузки, и три числа load average.

```bash
uptime
nproc
```

Сравните первое число load average с количеством ядер из вывода `nproc`. Если нагрузка заметно выше, ищите, кто её создаёт.

***

## 2. Найдите процесс в top

Команда `top` есть на любом сервере и показывает процессы в реальном времени. Параметр `-o %CPU` сортирует их по загрузке процессора.

```bash
top -o %CPU
```

<figure><img src="https://docs.f3cloud.com/img/linux-top.png" alt="Вывод top с load average, загрузкой процессора и двумя процессами yes, которые занимают по 100 процентов"><figcaption><p>Вверху общая нагрузка, ниже процессы, самые прожорливые первыми</p></figcaption></figure>

В верхней части видны load average, количество процессов, разбивка времени процессора и память. В таблице ниже интереснее всего несколько колонок.

* **PID** это номер процесса, он понадобится, чтобы его завершить.
* **USER** показывает, от имени какого пользователя работает процесс.
* **%CPU** это загрузка процессора. 100 % означает одно ядро целиком, поэтому на многоядерном сервере процесс может показывать и больше.
* **RES** показывает, сколько оперативной памяти процесс занимает на самом деле.
* **COMMAND** это имя программы.

Пока `top` открыт, клавиша <kbd>M</kbd> сортирует процессы по памяти, <kbd>P</kbd> снова по процессору, а <kbd>q</kbd> закрывает программу.

***

## 3. Установите htop

`htop` показывает то же самое, но нагляднее, с цветными шкалами для каждого ядра и памяти. На наших серверах с Debian 12 его по умолчанию нет, поэтому установите его.

```bash
apt install -y htop
htop
```

<figure><img src="https://docs.f3cloud.com/img/linux-htop.png" alt="Окно htop с полосами загрузки четырёх ядер, памятью, swap и списком процессов"><figcaption><p>Два ядра загружены полностью, два почти свободны</p></figcaption></figure>

В `htop` процессы можно выбирать стрелками. Клавиша <kbd>F6</kbd> выбирает колонку для сортировки, <kbd>F9</kbd> завершает выбранный процесс, <kbd>F5</kbd> показывает процессы деревом, а <kbd>F10</kbd> или <kbd>q</kbd> закрывает программу. Если работаете через Termius на телефоне, где клавиш F нет, нажимайте на подписи внизу экрана.

***

## 4. Получите список процессов командой ps

`top` и `htop` удобны для наблюдения, а для поиска и скриптов лучше подходит `ps`. Она один раз выводит список и завершается.

```bash
# Пять процессов, которые больше всего нагружают процессор
ps aux --sort=-%cpu | head -6

# То же по занятой памяти
ps aux --sort=-%mem | head -6

# Найти процесс по имени и показать его PID
pgrep -a nginx
```

***

## 5. Завершите процесс

Когда виновник найден, его можно завершить по номеру PID или по имени.

```bash
# Вежливо попросить процесс завершиться
kill 225145

# Завершить все процессы с таким именем
pkill yes
```

<figure><img src="https://docs.f3cloud.com/img/linux-kill.png" alt="Поиск процессов командами ps и pgrep и их завершение командами kill и pkill"><figcaption><p>Процессы найдены по имени и завершены</p></figcaption></figure>

Команда `kill` без параметров отправляет процессу сигнал **TERM**. Получив его, программа может сохранить данные, закрыть файлы и выйти сама. Если процесс не реагирует, используйте сигнал **KILL**, который система выполняет принудительно, не спрашивая программу.

```bash
kill -9 225145
```

> **Сначала обычный kill.**
>
> `kill -9` не даёт программе сохранить данные, поэтому база данных или сайт после такого завершения могут потерять последние изменения. Используйте его только тогда, когда обычный `kill` не помог. Службы, например Nginx или MySQL, правильнее перезапускать командой `systemctl restart`, а не завершать вручную.

***

## Частые вопросы

<details>

<summary>Нагрузка высокая, а в top нет процессов с большим %CPU</summary>

Посмотрите на значение **wa** в строке `%Cpu(s)`. Если оно велико, процессы ждут диск, а не процессор, и load average растёт из-за них. Узнать, какой процесс читает и пишет больше всего, поможет вкладка **I/O** в `htop` или программа `iotop`, её можно поставить командой `apt install -y iotop`.

</details>

<details>

<summary>Процесс завершился, но через минуту появился снова</summary>

Скорее всего, это служба, которую система перезапускает автоматически, или задача, которую запускает cron. Найдите, к какой службе относится процесс, командой `systemctl status PID` и остановите саму службу.

</details>

<details>

<summary>Что такое zombie в выводе top</summary>

Это процесс, который уже завершился, но его родитель ещё не забрал код завершения. Память и процессор zombie не занимает и обычно исчезает сам. Если таких процессов становится всё больше, проблема в программе-родителе, и помогает её перезапуск.

</details>

<details>

<summary>Сервер стабильно перегружен</summary>

Если процессор или память постоянно заняты обычной работой ваших программ, серверу не хватает ресурсов. Памяти может помочь [файл подкачки](https://docs.f3cloud.com/ru/linux/swap-linux.md), но надёжнее перейти на тариф мощнее. Как это сделать, рассказано в [частых вопросах](https://docs.f3cloud.com/ru/client-area/frequently-asked-questions.md).

</details>

***

## Наши ресурсы

**Telegram-канал:** [https://t.me/f3cloud_news](https://t.me/f3cloud_news)\
**Официальный сайт:** [https://f3cloud.com](https://f3cloud.com/ru)
