📜 Использование процессора более 100 % в выводе Top |

📜 Использование процессора более 100 % в выводе Top

Мануал

Обзор

Когда мы следим за производительностью нашей системы Linux, мы можем заметить, что использование процессора, сообщаемое командой top, иногда превышает 100%.

По сути, это явление может вызвать недоумение, особенно у новичков в Linux.

В этом руководстве мы разберемся, почему загрузка процессора может превышать 100%, приведем подробные примеры с использованием скриптов bash и объясним, как интерпретировать вывод этих команд.

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

Понимание многоядерных процессоров

Одноядерные процессоры, содержащие один вычислительный блок, были основой ранних компьютерных систем.

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

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

Их наследие продолжает оставаться основой, на которой были построены современные многоядерные архитектуры.

Современные процессоры имеют несколько ядер, что позволяет им выполнять различные задачи одновременно.

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

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

Чтобы узнать количество ядер процессора в нашей системе, мы можем использовать команду nproc:

nproc --all
4

Этот вывод показывает, что в системе четыре ядра процессора.

Команда top – это мощная утилита для мониторинга производительности системы, включая использование процессора.

По умолчанию top показывает процент использования ЦП для каждого процесса.

Однако при работе с многоядерными процессорами top может показать загрузку процессора, превышающую 100 %.

Когда top сообщает об использовании процессора, он делает это на основе каждого ядра.

Например, если процесс использует 100% одного ядра в четырехъядерной системе, top сообщит об этом как о 100%.

Соответственно, если процесс использует 100 % всех четырех ядер, top сообщит о нем как о 400 %.

Практические примеры с Bash-скриптами

В этом разделе мы создадим bash-скрипт для стрессовой нагрузки на процессор и используем его для тестирования с помощью команды top.

Давайте рассмотрим, как отслеживать использование ЦП на практических примерах.

Сначала мы создадим процесс с высокой нагрузкой на ЦП и понаблюдаем за его поведением с помощью команды top:

#!/bin/bash
# cpu_stress.sh
stress --cpu 4 --timeout 60

Теоретически этот скрипт создает процесс, требовательный к процессору.

Однако, чтобы использовать этот скрипт, нам потребуется установить утилиту stress.

Далее давайте установим утилиту stress:

sudo apt-get install stress

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

Кроме того, мы использовали команду apt-get для установки пакета в нашей среде Linux.

Поскольку мы установили утилиту stress, теперь мы можем запустить приведенный выше скрипт:

bash cpu_stress.sh

В идеале этот скрипт создаст интенсивную нагрузку на все четыре ядра в течение 60 секунд.

Теперь мы можем наблюдать за загрузкой процессора с помощью команды top:

top
PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
1234 user     20   0   4100   1244    932 R  400.0  0.0   0:10.45 stress

Наконец, чтобы интерпретировать вывод top, нам нужно понять, какие столбцы он отображает:

  • PID: идентификатор процесса
  • USER: пользователь, которому принадлежит процесс
  • PR: приоритет процесса
  • NI: приятное значение процесса
  • VIRT: виртуальная память, используемая процессом
  • RES: резидентная память, используемая процессом
  • SHR: общая память, используемая процессом
  • S: статус процесса (например, R – запущен, S – спящий)
  • %CPU: процент процессора, используемого процессом
  • %MEM: процент памяти, используемой процессом
  • TIME+: общее процессорное время, используемое процессом
  • COMMAND: имя команды

В этом примере команда stress использует 400 % процессора, что означает, что она полностью задействует все четыре ядра.

Настройка визуализации в top

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

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

Изменение режима отображения

Мы можем нажать I (прописная буква i), чтобы переключиться между различными режимами отображения загрузки процессора.

По умолчанию вверху отображается суммарное использование всех ядер.

В идеале нажатие I переключает отображение использования отдельных ядер:

%Cpu0 : 100.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 100.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu2 : 100.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu3 : 100.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

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

Изменение интервала обновления

Мы также можем изменить интервал обновления top, нажав кнопку d и введя желаемый интервал в секундах.

Это может помочь нам получить более реальное или более среднее представление об использовании процессора.

Давайте нажмем d во время работы top и введем 1 для односекундного интервала обновления:

top -- 15:25:36 up 1:23, 1 user, load average: 0.31, 0.47, 0.58 Tasks: 123 total, 2 running, 121 sleeping, 0 stopped, 0 zombie %Cpu(s): 4.0 us, 2.0 sy, 0.0 ni, 94.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st MiB Mem : 2048.0 total, 1024.0 free, 512.0 used, 512.0 buff/cache MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 1536.0 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1234 user 20 0 4100 1244 932 R 100.0 0.0 0:00.45 stress

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

Ограничение отображаемых процессов

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

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

Чтобы проиллюстрировать это, нажмем k во время выполнения команды top и введем PID процесса, который хотим убить:

PID to kill: 1234

После ввода PID указанный процесс будет завершен, и загрузка процессора снизится.

Однако следует отметить, что загрузка процессора свыше 100 % в верхней части является нормальной для систем с несколькими ядрами процессора.

Это означает, что процесс использует более одного ядра.

Например, на четырехъядерной системе один процесс может использовать до 400 % процессора, если он полностью задействует все четыре ядра, как мы видели ранее.

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

Рассмотрим сценарий, в котором процесс использует 150 % процессора на двухъядерной системе:

PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
12345 user     20   0   4100   1244    932 R  150.0  0.0   0:10.45 example_process

Это означает, что процесс использует 100 % одного ядра и 50 % второго.

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

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

Дополнительные возможности использования и опции команды top

Команда top предоставляет множество опций и интерактивных команд для настройки ее отображения и функциональности, таких как сортировка, фильтрация и повторная сортировка.

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

  • shift + P: сортировка процессов по использованию процессора
  • shift + M: сортировка процессов по использованию памяти
  • shift + T: сортировка процессов по времени выполнения

Кроме того, если мы нажмем shift + H, это переключит отображение потоков. По сути, это полезно для просмотра использования ЦП отдельными потоками внутри процесса:

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 user 20 0 4100 1244 932 R 100.0 0.0 0:10.45 example_process
1235 user 20 0 4100 1244 932 R 50.0 0.0 0:05.23 example_thread
1236 user 20 0 4100 1244 932 R 50.0 0.0 0:05.22 example_thread

Теперь top показывает отдельные потоки внутри example_process.

Наконец, мы можем настроить, какие столбцы будут отображаться в top, нажав f и выбрав столбцы, которые мы хотим включить:

Current Fields: K for SortKey U for User/Mem k for VIRT y for GID
Toggle Fields via: A for display D for default 1 for load1 F for free
PID to add: [Add field here]

Затем выберите нужные столбцы, включив или выключив их.

Заключение

В этом руководстве мы узнали, почему загрузка процессора, о которой сообщает top, может превышать 100 %.

И почему это важно для эффективного мониторинга и настройки производительности системы.

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

Более того, практические примеры с bash-скриптами помогают проиллюстрировать эти концепции, облегчая нам эффективный мониторинг и управление нашей системой Linux.

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

Это не указывает на проблему, а скорее демонстрирует эффективность современных многоядерных процессоров.

 

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий