Обзор
Когда мы следим за производительностью нашей системы Linux, мы можем заметить, что использование процессора, сообщаемое командой top, иногда превышает 100%.
По сути, это явление может вызвать недоумение, особенно у новичков в Linux.
В этом руководстве мы разберемся, почему загрузка процессора может превышать 100%, приведем подробные примеры с использованием скриптов bash и объясним, как интерпретировать вывод этих команд.
Более того, мы также рассмотрим, как изменить визуальное представление в команде top, чтобы лучше понять использование процессора.
Понимание многоядерных процессоров
Одноядерные процессоры, содержащие один вычислительный блок, были основой ранних компьютерных систем.
Кроме того, они выполняли по одной операции за раз, что делало их более простыми, но менее эффективными для работы в многозадачном режиме по сравнению с современными многоядерными процессорами.
Несмотря на свои недостатки, они сыграли важную роль в развитии вычислительной техники и до сих пор используются в специфических приложениях, например во встраиваемых системах, где на первый план выходят простота и энергоэффективность.
Их наследие продолжает оставаться основой, на которой были построены современные многоядерные архитектуры.
Современные процессоры имеют несколько ядер, что позволяет им выполнять различные задачи одновременно.
Соответственно, каждое ядро может обрабатывать свой поток инструкций, что значительно повышает общую вычислительную мощность.
Например, четырехъядерный процессор имеет четыре отдельных ядра, каждое из которых способно выполнять свои задачи независимо.
Чтобы узнать количество ядер процессора в нашей системе, мы можем использовать команду nproc:
Этот вывод показывает, что в системе четыре ядра процессора. Команда top – это мощная утилита для мониторинга производительности системы, включая использование процессора. По умолчанию top показывает процент использования ЦП для каждого процесса. Однако при работе с многоядерными процессорами top может показать загрузку процессора, превышающую 100 %. Когда top сообщает об использовании процессора, он делает это на основе каждого ядра. Например, если процесс использует 100% одного ядра в четырехъядерной системе, top сообщит об этом как о 100%. Соответственно, если процесс использует 100 % всех четырех ядер, top сообщит о нем как о 400 %. В этом разделе мы создадим bash-скрипт для стрессовой нагрузки на процессор и используем его для тестирования с помощью команды top. Давайте рассмотрим, как отслеживать использование ЦП на практических примерах. Сначала мы создадим процесс с высокой нагрузкой на ЦП и понаблюдаем за его поведением с помощью команды top: Теоретически этот скрипт создает процесс, требовательный к процессору. Однако, чтобы использовать этот скрипт, нам потребуется установить утилиту stress. Далее давайте установим утилиту stress: В приведенном выше фрагменте мы использовали команду sudo для предоставления нам прав суперпользователя, чтобы иметь возможность установить необходимый пакет. Кроме того, мы использовали команду apt-get для установки пакета в нашей среде Linux. Поскольку мы установили утилиту stress, теперь мы можем запустить приведенный выше скрипт: В идеале этот скрипт создаст интенсивную нагрузку на все четыре ядра в течение 60 секунд. Теперь мы можем наблюдать за загрузкой процессора с помощью команды top: Наконец, чтобы интерпретировать вывод top, нам нужно понять, какие столбцы он отображает: В этом примере команда stress использует 400 % процессора, что означает, что она полностью задействует все четыре ядра. Команда top предлагает несколько способов настройки визуализации использования процессора, что облегчает понимание данных. С помощью различных визуализаций мы можем настроить вывод команды в соответствии с нашими потребностями и получить более наглядное представление об использовании наших процессов. Мы можем нажать I (прописная буква i), чтобы переключиться между различными режимами отображения загрузки процессора. По умолчанию вверху отображается суммарное использование всех ядер. В идеале нажатие I переключает отображение использования отдельных ядер: В приведенном выше выводе мы изменили визуализацию на представление отдельных ядер, чтобы увидеть использование каждого ядра. Мы также можем изменить интервал обновления top, нажав кнопку d и введя желаемый интервал в секундах. Это может помочь нам получить более реальное или более среднее представление об использовании процессора. Давайте нажмем d во время работы top и введем 1 для односекундного интервала обновления: Мы заметили, что интервал обновления установлен на одну секунду, что обеспечивает более частую частоту обновления для мониторинга использования процессора. Наконец, мы можем нажать кнопку k, чтобы завершить процесс прямо из верхнего интерфейса. В частности, это может быть полезно, если определенный процесс вызывает высокую нагрузку на процессор. Чтобы проиллюстрировать это, нажмем k во время выполнения команды top и введем PID процесса, который хотим убить: После ввода PID указанный процесс будет завершен, и загрузка процессора снизится. Однако следует отметить, что загрузка процессора свыше 100 % в верхней части является нормальной для систем с несколькими ядрами процессора. Это означает, что процесс использует более одного ядра. Например, на четырехъядерной системе один процесс может использовать до 400 % процессора, если он полностью задействует все четыре ядра, как мы видели ранее. Впоследствии это не означает, что в системе есть какие-то проблемы; скорее, это отражает многоядерную природу современных процессоров. Рассмотрим сценарий, в котором процесс использует 150 % процессора на двухъядерной системе: Это означает, что процесс использует 100 % одного ядра и 50 % второго. Соответственно, высокая загрузка процессора не является проблемой по своей сути, но она может повлиять на производительность системы, если критически важные процессы будут испытывать недостаток ресурсов процессора. Поэтому такие инструменты мониторинга, как top, помогают выявить подобные сценарии и и принять меры по их исправлению, например, завершить невосприимчивые процессы или оптимизировать ресурсоемкие приложения. Команда top предоставляет множество опций и интерактивных команд для настройки ее отображения и функциональности, таких как сортировка, фильтрация и повторная сортировка. Давайте разберемся в наиболее часто используемых методах сортировки с помощью top: Кроме того, если мы нажмем shift + H, это переключит отображение потоков. По сути, это полезно для просмотра использования ЦП отдельными потоками внутри процесса: Теперь top показывает отдельные потоки внутри example_process. Наконец, мы можем настроить, какие столбцы будут отображаться в top, нажав f и выбрав столбцы, которые мы хотим включить: Затем выберите нужные столбцы, включив или выключив их. В этом руководстве мы узнали, почему загрузка процессора, о которой сообщает top, может превышать 100 %. И почему это важно для эффективного мониторинга и настройки производительности системы. Поняв, что top сообщает об использовании каждого ядра, и зная, как настроить визуализацию, мы сможем получить более глубокое представление о производительности нашей системы. Более того, практические примеры с bash-скриптами помогают проиллюстрировать эти концепции, облегчая нам эффективный мониторинг и управление нашей системой Linux. Наконец, использование процессора более чем на 100% является нормальным поведением в многоядерных системах. Это просто отражает, что процессы используют несколько ядер. Это не указывает на проблему, а скорее демонстрирует эффективность современных многоядерных процессоров. Практические примеры с Bash-скриптами
#!/bin/bash
# cpu_stress.sh
stress --cpu 4 --timeout 60
Настройка визуализации в top
Изменение режима отображения
%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
Изменение интервала обновления
Ограничение отображаемых процессов
PID to kill: 1234
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
Дополнительные возможности использования и опции команды top
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
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]
Заключение