Процесс грузит процессор linux

Контроль нагрузки и процессов: top, htop, atop

Каждый запущенный на сервере процесс оказывает нагрузку, и если ресурсов сервера становится недостаточно, могут возникать проблемы: медленная работа сайта, задержки в выполнении скриптов и так далее.

Проанализировать, что именно нагружает сервер, можно с помощью специальных утилит. Их довольно много; в статье мы рассмотрим три из них:

В целом они довольно похожи; работа с htop может быть немного удобнее за счет интерактивности; при этом top предустановлена во всех дистрибутивах Linux и не требует отдельной установки; atop отличается возможностью ведения логов.

При медленной работе сайта дополнительно рекомендуем воспользоваться сервисом PageSpeed Insights от Google, который анализирует скорость загрузки страниц и сообщает, каким образом можно оптимизировать работу сайта. Также можно попытаться оптимизировать работу сайта за счет переноса каталога временных файлов MySQL в tmpfs .

top

Как было сказано выше, утилита top предустановлена в UNIX-системах, поэтому для запуска вам достаточно подключиться к серверу по SSH и выполнить команду top .

Вывод утилиты выглядит следующим образом:

В верхней части выводится информация о системе, ниже — список процессов. Вывод обновляется каждые 2 секунды. Самые «жадные» до ресурсов процессы, оказывающие самую большую нагрузку на процессор, будут выведены вверху списка.

Сведения о системе

Слева вверху указано текущее время системы, далее:

Up — время работы системы с последнего запуска.

User — количество текущих пользователей.

Load average — средняя нагрузка на сервер: отображаются значения за одну, пять и 15 минут назад.

Tasks — общее количество запущенных процессов в разных статусах ( running — выполняемые; sleeping — в ожидании; stopped — остановленные; zombie — «зомби», дочерние процессы, ожидающие завершения родительского процесса).

Cpu(s) — процент времени процессора, затраченного на выполнение процессов, в том числе:

us — пользовательские процессы (высокое значение данного показателя может указывать, в том числе, на проблемы в коде сайта, необходимость его оптимизации);

id — неиспользуемые ресурсы (чем выше этот показатель, тем лучше);

wa — операции ввода/вывода, т.е. дисковые операции.

Mem , Swap — сведения об использовании оперативной памяти ( total — общий объем, free — объем свободной памяти, used — объем использованной памяти).

Сведения о процессах

По умолчанию процессы выстроены в таблице по размеру нагрузки на процессор, от большего значения к меньшему.

PID — идентификатор процесса;

USER — пользователь, запустивший процесс;

NI — измененный приоритет (присвоенный пользователем с помощью команды nice );

VIRT — объем используемой виртуальной памяти (здесь выводится тот объем памяти, который был запрошен процессом, даже если фактически используется меньше);

RES — объем используемой оперативной памяти (в данном случае, если процесс запросил 50Мб памяти, а использует 10Мб, будет выведено 10Мб);

SHR — объем памяти, разделяемой с другими процессами (т.е. память, которая может быть использована другими процессами);

Читайте также:  Symlink linux что такое

S — статус процесса ( running — запущен; sleeping — в ожидании; zombie — процесс-«зомби»);

%CPU — процент использования процессорного времени;

%MEM — процент использования оперативной памяти;

TIME — общее время работы процесса;

COMMAND — имя процесса (команда, которой был запущен процесс).

Управление

Для работы с утилитой top используются следующие клавиши:

Пробел — обновить вывод

M — сортировка по используемой памяти

P — сортировка по нагрузке на процессор (используется по умолчанию)

T — сортировка по времени работы процесса

A — сортировка по максимальному потреблению различных ресурсов

u — сортировка по имени пользователя (потребуется ввести имя пользователя)

k — завершить процесс (потребуется указать его идентификатор, PID)

n — изменить количество процессов в выводе (потребуется указать нужное количество)

c — вывести полный путь запущенного процесса (столбец COMMAND)

h — вывод справки

q — выход из программы

htop

В отличие от top , утилиту htop сначала необходимо установить на сервер:

Ubuntu / Debian:

apt-get install htop
yum install htop

Вывод команды выглядит следующим образом:

Аналогично выводу top , в верхней части представлена информация о системе, ниже — список процессов. Значения столбцов в htop те же, что в top (они описаны выше ).

Сверху слева вы можете видеть данные о нагрузке каждого ядра процессора, объем занятой памяти, сведения о количестве процессов, значения load avearage (средней нагрузки) за последние 1, 5 и 15 минут и аптайм системы.

По умолчанию процессы отсортированы по уровню нагрузки на процессор, от большего к меньшему.

Чтобы отсортировать их по занятой памяти (или любому другому параметру), просто кликните на название нужного столбца, например MEM. Для обратной сортировки (от меньшего к большему) достаточно кликнуть на тот же столбец еще раз. Также для управления сортировкой можно использовать клавиши M (сортировка по памяти), P (по процессору), T (по времени), аналогично утилите top.

Пробел — отметить процесс (таким образом можно помечать процессы для групповой операции с ними, например, завершения).

u — вывести процессы конкретного пользователя.

Для управления используются клавиши F1 – F10:

F1 — вывод справки

F2 — настройка вывода (добавление, удаление столбцов, отображение расширенной информации в верхнем блоке и пр.)

F3 — поиск процессов

F4 — фильтрация процессов (вывод процессов, имеющих в названии указанное слово)

F5 — вывод дерева процессов (родительские и дочерние процессы)

F6 — изменить тип сортировки

F7 / F8 — повышение / понижение приоритета

F9 — завершение процесса (в отличие от top , не требуется указание PID — просто выделите с помощью мыши или клавиатуры нужный процесс и нажмите F9. Для подтверждения завершения процесса нажмите Enter, для отмены — Esc).

F10 — выход из программы

Функции для каждой клавиши могут изменяться, в зависимости от того, в каком меню программы вы находитесь, при этом доступные действия по соответствующим клавишам будут отображаться внизу окна, что упрощает работу с утилитой.

atop

Основным преимуществом утилиты atop является функция ведения логов. Благодаря этому можно не только контролировать нагрузку в текущий момент, но и отслеживать работу процессов за прошедшие дни, чтобы диагностировать плавающие ошибки, которые сложно «поймать» при мониторинге в реальном времени.

Читайте также:  Nvidia 460 driver linux

Утилиту необходимо установить на сервер:

Ubuntu / Debian:

apt-get install atop -y
yum install atop -y

Также рекомендуем добавить atop в автозагрузку:

Ubuntu / Debian / CentOS 7:

systemctl enable atop
chkconfig atop on

Ubuntu 14.04:

rm /etc/init/atop.override

Вывод выглядит примерно следующим образом:

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

Для управления выводом можно использовать:

m — сортировка по используемой памяти

d — сортировка по нагрузке на диск

u — нагрузка по пользователям

v — подробная информация по процессам

i — изменение интервала обновления данных (по умолчанию 10 секунд)

g — вернуть вывод по умолчанию

n — сортировка процессов по нагрузке на сеть (доступна при наличии установленного патча ядра)

Сочетания клавиш с Shift выстроят текущий список процессов по соответствующим параметрам:

  • Shift + m — сортировка процессов памяти
  • Shift + с — сортировка по потреблению CPU (по умолчанию)
  • Shift + d — сортировка по использованию диска
  • Shift + n — сортировка по использованию сети

Логи atop

По умолчанию atop собирает сведения о состоянии системы каждые 10 минут и сохраняет их в файл лога, располагающийся в директории /var/log/atop .

Чтобы просмотреть лог за сегодня, выполните:

  • t — перейти вперед по времени
  • Shift + t — перейти назад по времени

Файл за конкретный день имеет имя atop_ГГГГММДД . Чтобы просмотреть лог за нужный день, используйте команду atop -r и укажите путь к файлу, например:

atop -r /var/log/atop/atop_20200227

Изменить настройки ведения лога можно в конфигурационном файле atop , который размещается по пути /etc/default/atop или /etc/sysconfig/atop — в CentOS.

# Интервал создания снимка нагрузки сервера, в секундах:
INTERVAL=600

# Путь к директории с логами:
LOGPATH="/var/log/atop"

# Имя файла логов
OUTFILE="$LOGPATH/daily.log"

Например, для того, чтобы atop делал снимок нагрузки раз в минуту, а не раз в 10 минут, укажите интервал 60.

После внесения изменений перезапустите atop :

systemctl restart atop.service

Источник

Высокая загрузка процессора системой в Linux. Как узнать почему?

high system load
(источник: joxi.ru)
high cpu utilization
(источник: joxi.ru) Иногда имеем высокую загрузку процессора некими системными задачами.
Не процессами из userland, а именно «система» грузит.
Т.е. явно выполняются какие-то системные вызовы (выделение памяти, переключения контекста), или работают драйверы (обрабатывают прерывания или что-то еще), идёт активный ввод-вывод. Это всё я всегда предполагаю, Но как узнать ТОЧНО, почему высокая загрузка — не представляю. Поэтому прошу помощи. Сейчас я использую несколько косвенных методов, но они не всегда подходят: глянуть в iotop, прибвать процессы по одному, и смотреть не спала ли нагрузка. Но иногда просто нельзя останавливать сервисы. А иногда и процессов работающих уже почти не осталось, а нагрузка всё равно есть. Вот хочется найти какое-нибудь средство быстро и точно узнавать что же грузит процессор.

что значит «система» грузит? примеры ваших процессов приведите? что для вас «быстро»? если процесс выдает 100% нагрузку в течении 0.5 секунд, с частотой 3 секунды? если раз в минуту грузит 100% на 10 секунд? «быстро» зависит от периода, который конкретно для вас слишком долгий

Читайте также:  Network interfaces linux command

Сорри, ещё не знаю тут как ответить конкретно человеку. Поэтому отпишу сразу всем: 1) Система — это поле sy в top. Или «красненькая» часть столбца в htop. Короче всё, что не user-space и не i/o. 2) Я рассматриваю сейчас случаи, когда 100% загрузка проца/ядра, и либо все эти 100% значатся как sys.load, либо часть как user, а часть как sys. 3) В основном меня начинает этот вопрос волновать когда эта нагрузка постоянна в течение как минимум часа и никуда не девается, и никак не коррелирует со входящим траффиком. Ну либо девается, когда убиваешь всё-всё-всё, гасишь обмен траффиком с сеткой.

Результат vmstat уже показыватьно нет смысла. В этот раз причиной был DDOS с флудом TCP-пакетами на 80-й порт. И сетевушка просто захлёбывалась. Ядро даже не успевало забирать из её буфера пакеты. Но это я точно выяснил лишь когда хостер прикрыл траффик из инета кроме как от меня. Но не всегда есть такая возможность. Да и опять же. всё это косвенные способы. Я их знаю и умею. Но я хочу найти некую системную утилиту, которая показывает что там происходит под капотом у ядра. Чем оно грузит проц. Какой драйвер, прерывание от какого устройства, какой системный вызов.

Ответить конкретно — @имя (в одном комментарии допускается только одно). Смотреть статистику прерываний — /proc/interrupt (вообще, man 5 proc — полезное чтиво). А тут нагуглил кучу разных мониторов.

2 ответа 2

  • надо сходить сюда, можете найти русский перевод или похожие статьи. Поможет вам ограничить выборочно потребление CPU процессами
  • почитать про strace и подобные ему sudo strace -t -e trace=open,connect,accept unity сможете увидеть много интересного
  • для ядра — ftrace или поищите еще kernel tracer-ов

утилиты, которая дает понять это с одного взгляда я не знаю, если вы не нагуглите, я бы пошел следующим способом: настроить мониторинг процессов так, чтобы в случае возникновения нагрузки на K% на N секунд каким-либо процессом, он давал алерт.

Можно наскриптовать так, чтобы при возникновении алерта, мониторинг натравливал trace на этот процесс, на секунду, допустим, и сохранял бы список самых часто выполняемых / долгих функций.

Но тут нужно быть осторожным, чтобы не повалить систему и не заполнить hdd. Т.е. скриптинг должен учитывать, что необязательно ставить trace на процесс, который уже был под трейсом (т.е. для которого уже сохранен tracefile), иначе процессы начнут тормозить еще больше, к примеру. Нельзя трейсить слишком долго — гигабайтные дампы вам не нужны.

Если вы решаете конкретную задачу борьбы с DDoS — ну, или очень много денег и очень много дц (повезло, если у вас есть), или cloudflare — я бы так пошел для начала.

Т.е. тут все от задач зависит, дебажить драйвер ядра — один подход, защищаться от ddos — другой.

Источник

Оцените статью
Adblock
detector