Как просмотреть нагрузку на процессор в Linux
В Linux потребление ресурсов CPU, с сортировкой по наибольшей загрузке, можно посмотреть при помощи двух команд: ps и top.
Важный нюанс: Значение в столбце «CPU» в обоих командах считается от загрузки одного ядра процессора. Таким образом сумма процентов на многоядерных машинах будет больше 100%. К примеру для четырехядерного процессора суммарный процент потребления всех процессов не может превышать 400%.
Рассмотрим каждую из команд подробней.
Команда ps
Для запуска введите в консоли ОС команду:
$ ps -aux --sort -rss USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND user 30799 51.2 8.1 2733764 285136 ? Rl 09:25 5:30 /usr/lib/chromium-browser/chromium-browser --ppapi-flash-path=/usr/lib/pepperflashplugin-nonfree/libpepflashplayer.so --ppap user 2800 0.1 6.6 9972812 234184 ? Sl окт31 1:26 /usr/bin/plasmashell --shut-up user 31308 2.4 5.3 1767496 188672 ? Sl 09:26 0:13 /usr/lib/chromium-browser/chromium-browser --type=renderer --enable-pinch --field-trial-handle=7228759356551874141,180166971 user 31011 3.9 5.3 1793296 186812 ? Sl 09:25 0:25 /usr/lib/chromium-browser/chromium-browser --type=renderer --enable-pinch --field-trial-handle=7228759356551874141,180166971 user 31369 5.5 4.8 1378568 171328 ? Sl 09:28 0:23 /usr/lib/libreoffice/program/soffice.bin --writer --splash-pipe=5 user 14442 12.1 4.2 1050808 150148 ? Sl 01:19 60:04 /usr/lib/x86_64-linux-gnu/libexec/kscreenlocker_greet --graceTime 5000 --ksldfd 26 user 31111 0.9 3.8 1708496 134564 ? Sl 09:25 0:06 /usr/lib/chromium-browser/chromium-browser --type=renderer --enable-pinch --field-trial-handle=7228759356551874141,180166971 user 1225 0.0 3.7 3639148 132092 ? Sl окт31 1:00 /usr/bin/plasmashell --shut-up user 31078 0.6 3.7 1724480 130724 ? Sl 09:25 0:03 /usr/lib/chromium-browser/chromium-browser --type=renderer --enable-pinch --field-trial-handle=7228759356551874141,180166971 user 30986 0.7 3.3 1717860 117660 ? Sl 09:25 0:04 /usr/lib/chromium-browser/chromium-browser --type=renderer --enable-pinch --field-trial-handle=7228759356551874141,180166971 user 1216 1.7 3.2 3271220 113736 ? Sl окт31 20:36 kwin_x11
Важными столбцами являются:
- USER Пользователь, от имени которого работает процесс
- PID Идентификатор процесса
- %CPU Процент загрузки ядра
Согласно данному выводу можно понять, что экземпляр программы dd с PID=31712 практически полностью использует одно ядро процессора.
Команда top
Также загрузку процессора можно посмотреть в интерактивном режиме при помощи команды top. Для запуска введите в консоли ОС команду:
top - 15:13:56 up 8 days, 5:18, 4 users, load average: 0,01, 0,04, 0,05 Tasks: 124 total, 1 running, 123 sleeping, 0 stopped, 0 zombie %Cpu(s): 0,0 us, 0,0 sy, 0,0 ni, 99,9 id, 0,1 wa, 0,0 hi, 0,0 si, 0,0 st KiB Mem: 2060916 total, 1714780 used, 346136 free, 184580 buffers KiB Swap: 901116 total, 0 used, 901116 free, 999472 cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 22684 root 20 0 24768 1476 1016 R 0,3 0,1 0:00.01 top 1 root 20 0 15444 756 612 S 0,0 0,0 0:08.79 init 2 root 20 0 0 0 0 S 0,0 0,0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0,0 0,0 1:08.03 ksoftirqd/0 5 root 20 0 0 0 0 S 0,0 0,0 0:00.00 kworker/u:0 6 root rt 0 0 0 0 S 0,0 0,0 0:00.77 migration/0 7 root rt 0 0 0 0 S 0,0 0,0 0:02.81 watchdog/0 8 root rt 0 0 0 0 S 0,0 0,0 0:00.77 migration/1 10 root 20 0 0 0 0 S 0,0 0,0 0:04.40 ksoftirqd/1 12 root rt 0 0 0 0 S 0,0 0,0 0:02.40 watchdog/1 13 root rt 0 0 0 0 S 0,0 0,0 0:01.50 migration/2 15 root 20 0 0 0 0 S 0,0 0,0 0:04.33 ksoftirqd/2 16 root rt 0 0 0 0 S 0,0 0,0 0:02.26 watchdog/2 17 root rt 0 0 0 0 S 0,0 0,0 0:00.49 migration/3 19 root 20 0 0 0 0 S 0,0 0,0 0:03.73 ksoftirqd/3 20 root rt 0 0 0 0 S 0,0 0,0 0:02.21 watchdog/3 21 root 0 -20 0 0 0 S 0,0 0,0 0:00.00 cpuset 22 root 0 -20 0 0 0 S 0,0 0,0 0:00.00 khelper 23 root 20 0 0 0 0 S 0,0 0,0 0:00.00 kdevtmpfs 24 root 0 -20 0 0 0 S 0,0 0,0 0:00.00 netns 25 root 20 0 0 0 0 S 0,0 0,0 0:01.84 sync_supers 26 root 20 0 0 0 0 S 0,0 0,0 0:00.05 bdi-default 27 root 0 -20 0 0 0 S 0,0 0,0 0:00.00 kintegrityd 28 root 0 -20 0 0 0 S 0,0 0,0 0:00.00 kblockd 30 root 20 0 0 0 0 S 0,0 0,0 0:08.20 kworker/2:1 31 root 20 0 0 0 0 S 0,0 0,0 0:01.98 kworker/3:1 32 root 20 0 0 0 0 S 0,0 0,0 0:00.32 khungtaskd 33 root 20 0 0 0 0 S 0,0 0,0 0:00.00 kswapd0 34 root 25 5 0 0 0 S 0,0 0,0 0:00.00 ksmd 35 root 39 19 0 0 0 S 0,0 0,0 0:00.00 khugepaged 36 root 20 0 0 0 0 S 0,0 0,0 0:00.00 fsnotify_mark 37 root 0 -20 0 0 0 S 0,0 0,0 0:00.00 crypto 103 root 0 -20 0 0 0 S 0,0 0,0 0:00.00 ata_sff 111 root 20 0 0 0 0 S 0,0 0,0 0:00.00 scsi_eh_0 114 root 20 0 0 0 0 S 0,0 0,0 0:00.01 scsi_eh_1 115 root 20 0 0 0 0 S 0,0 0,0 0:15.02 kworker/u:1 119 root 0 -20 0 0 0 S 0,0 0,0 0:00.00 mpt_poll_0 137 root 0 -20 0 0 0 S 0,0 0,0 0:00.00 mpt/0 165 root 20 0 0 0 0 S 0,0 0,0 0:00.00 scsi_eh_2 169 root 20 0 0 0 0 S 0,0 0,0 0:11.68 kworker/3:2 177 root 20 0 0 0 0 S 0,0 0,0 1:37.28 kworker/1:2 207 root 20 0 0 0 0 S 0,0 0,0 0:07.77 flush-8:0 213 root 20 0 0 0 0 S 0,0 0,0 0:21.32 jbd2/sda1-8 214 root 0 -20 0 0 0 S 0,0 0,0 0:00.00 ext4-dio-unwrit 355 root 20 0 24140 1468 816 S 0,0 0,1 0:00.06 udevd 502 root 20 0 24100 1096 468 S 0,0 0,1 0:00.00 udevd 503 root 20 0 24100 1028 408 S 0,0 0,0 0:00.00 udevd 527 root 0 -20 0 0 0 S 0,0 0,0 0:00.00 kpsmoused 528 root 20 0 0 0 0 S 0,0 0,0 0:04.36 kworker/2:2 555 root 0 -20 0 0 0 S 0,0 0,0 0:00.00 ttm_swap 1842 root 20 0 152m 8928 4548 S 0,0 0,4 8:15.13 vmtoolsd 1885 root 20 0 60288 9396 6444 S 0,0 0,5 0:00.04 VGAuthService 1979 root 20 0 199m 5016 4128 S 0,0 0,2 3:19.79 ManagementAgent
Важными столбцами являются:
- USER Пользователь, от имени которого работает процесс
- PID Идентификатор процесса
- %CPU Процент загрузки ядра
Согласно данному выводу видно, что два процесса браузера Chromium используют по 40% возможностей одного из ядер процессора.
Загрузка процессора Linux
Чтобы узнать хватает ли мощности процессора вашему серверу или компьютеру надо посмотреть загрузку процессора в данный момент или за последнее время. Это значение показывает на сколько процентов используется вычислительная мощность процессора.
В этой статье мы рассмотрим несколько способов решения этой задачи с помощью привычных системных утилит и более сложных инструментов.
Как посмотреть загрузку процессора в Linux
1. Утилита htop
Самый простой способ узнать насколько процессор загружен в данный момент — воспользоваться утилитой htop. Она показывает не только процент загрузки по каждому ядру процессора отдельно, но и позволяет найти процессы, которые нагружают систему больше всего. Для установки htop в Debian или Ubuntu выполните:
Главное окно программы выглядит вот так:
Здесь в верхней части окна выводится загрузка ядер процессора в виде наглядных шкал, а ниже процессы. В данном примере у процессора 12 ядер и каждое из них загружено не больше чем на один процент.
2. Файл /proc/loadavg
Если надо сориентироваться какая была нагрузка на процессор в последнее время, тут htop не поможет. Можно воспользоваться файлом /proc/loadavg. Его создаёт ядро и в нём содержится информация о средней нагрузке за одну, пять и пятнадцать минут. Но обратите внимание, данные, находящиеся в этом файле не такие однозначные. Во первых, это не проценты, во вторых, они отображают не нагрузку на процессор, а нагрузку на систему в целом.
Первые три значения в этом файле означают среднее количество процессов или потоков, которые выполняются, находятся в очереди на выполнение или ждут завершения операций ввода/вывода за 1, 5 и 15 минут. Вот:
Обычно, если значение больше единицы — значит нагрузка уже большая и надо разбираться почему. Если значение за минуту меньше значений за пять и пятнадцать минут — нагрузка падает, если больше — растёт. Таким образом можно немного сориентироваться насколько загружена ваша система. Эти значения можно использовать для общего ориентирования или отправки уведомлений на почту, а для разбора полётов уже применять другие метрики и программы.
Четвертое значение здесь — это количество процессов — выполняемых в данный момент, обычно соответствует количеству процессоров, следующее число через слеш — это общее количество таких процессов в системе. Последнее значение — PID последнего созданного процесса.
3. Утилита mpstat
Утилита mpstat позволяет посмотреть подробную статистику по использованию процессора. Можно посмотреть не только информацию по каждому из ядер, но и куда используются ресурсы — на ввод/вывод, ядро или программы пространства пользователя. Для установки программы в Ubuntu или Debian выполните:
Для просмотра общей информации выполните такую команду:
А для просмотра подробностей по каждому ядру процессора используйте опцию -P с параметром ALL:
Вот значения колонок в выводе этой программы:
- CPU — номер ядра процессора;
- %usr — потребление программами пространства пользователя;
- %nice — потребление ресурсов в процентах программами в пространстве пользователя с повышенным приоритетом;
- %sys — потребление ресурсов процессора ядром;
- %iowait — затраты на ожидание ввода/вывода;
- %irq — ресурсы, потраченные на прерывания для работы с аппаратным обеспечением;
- %soft — ресурсы, потраченные на программные прерывания;
- %steal — украденные процессорные ресурсы, актуально для виртуальных машин;
- %guest — ресурсы, потраченные на работу виртуального процессора;
- %idle — неиспользованные ресурсы.
Как видите, в данном случае нагрузка на процессор не достигает даже трех процента для некоторых ядер.
4. Команда nmon
Утилита nmon позволяет выводить данные, в виде, похожем на htop, но только немного подробнее. Для установки её в Ubuntu и Debian выполните:
Для установки в CentOS или REHL:
После запуска надо нажать кнопку c для того чтобы отобразить информацию о нагрузке на ядра процессора:
Здесь кроме наглядной шкалы по каждому ядру выводится информация в процентах по таким показателям:
- User% — ресурсы, потраченные программами в пространстве пользователя;
- Sys% — ресурсы, потраченные ядром;
- Wait% — ресурсы, которые идут на ожидание ввода/вывода;
Здесь уже можно сориентироваться насколько всё загружено и в чём проблема.
5. CoreFreq
Если всей полученной ранее информации о производительности вам мало, можно воспользоваться утилитой CoreFreq. Её нет в официальных репозиториях, поэтому придется собирать программу из исходников. Но зато она имеет свой модуль ядра, который устанавливает свои счетчики производительности в ядре и возвращает утилите наиболее подробные данные. Сначала установите необходимые компоненты. В Ubuntu:
sudo apt install dkms git libpthread-stubs0-dev
sudo yum group install ‘Development Tools’
Затем скачайте репозиторий утилиты с GitHub и соберите её:
git clone https://github.com/cyring/CoreFreq.git
Загрузите модуль ядра такой командой:
Затем запускайте программу:
Вверху программы отображается информация о процессоре, ниже шкалы с загруженностью каждого ядра, а её ниже различные показатели по каждому ядру: частота — Freq, ускорение — Turbo, C0-C7 — значения состояний C-State процессора. В данном примере, большинство ядер процессора работают на минимальной частоте и большую часть времени находятся в состоянии C1. Это состояние означает, что ядро не активно, но может в любой момент перейти к выполнению инструкций. Состояние C0 — означает, что ядро активно и выполняет какие-то действия.
С помощью этой утилиты вы сможете узнать максимально подробную информацию о загрузке процессора и о самом процессоре в целом.
Выводы
В этой небольшой статье мы рассмотрели как определяется загрузка процессора Linux с помощью различных утилит. Как системных, так и сторонних. А какие утилиты для таких целей используете вы? Напишите в комментариях!
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.