Сколько ядер я использую на сервере Linux?

30

Мне просто интересно, как я могу узнать в bash, сколько процессорных ядер пользователь сейчас использует на Linux Server?

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

Спасибо и всего наилучшего!

Тим
источник

Ответы:

39

Чтобы получить количество ядер процессора на процессор:

grep "^core id" /proc/cpuinfo | sort -u | wc -l

Или получить количество физических процессоров :

grep "^physical id" /proc/cpuinfo | sort -u | wc -l
Аликс Аксель
источник
как проверить это для данного пользователя?
Макис
26

Я не знаю, поможет ли это, но вы можете использовать эту mpstatутилиту для разбивки загрузки ЦП по отдельным процессорам (или ядрам). Например:

$ mpstat -P ALL 1

12:49:59 PM  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s
12:50:00 PM  all    7.89    0.00    1.25    0.88    0.00    0.00    0.00   89.97   1359.00
12:50:00 PM    0   14.00    0.00    0.00    0.00    0.00    0.00    0.00   86.00   1043.00
12:50:00 PM    1   15.84    0.00    7.92    3.96    0.00    0.99    0.00   71.29    297.00
12:50:00 PM    2    3.96    0.00    0.00    1.98    0.00    0.99    0.00   93.07      0.00
12:50:00 PM    3    3.96    0.00    0.99    2.97    0.00    0.00    0.00   92.08      0.00
12:50:00 PM    4    4.00    0.00    0.00    0.00    0.00    0.00    0.00   96.00      0.00
12:50:00 PM    5    4.95    0.00    0.99    0.00    0.00    0.00    0.00   94.06     18.00
12:50:00 PM    6   10.89    0.00    0.99    0.00    0.00    0.00    0.00   88.12      0.00
12:50:00 PM    7    5.05    0.00    0.00    0.00    0.00    0.00    0.00   94.95      0.00

В этом примере вы можете видеть , что центральный процессор 0, 1и 6делают больше работы , чем остальные. Иногда вы увидите, что один процессор близок (или почти) к 100%, а другие - к нулю. Это может быть индикатор программы (или части программы), который является однопоточным и может использовать только один процессор за один раз.

Для установки mpstatв системе Fedora, RHEL или CentOS используйте yum install sysstat.

Мэтт Солнит
источник
Спасибо миллион за предоставленный ответ! Мои коллеги использовали команду "top" и делали неправильные выводы об использовании процессора, пока я не показал им команду mpstat.
Nav
Не доступно на Ubuntu: # aptitude search mpstat #.
Аликс Аксель
2
@AlixAxel попробуйте aptitude search systatвместо этого.
Мэтт Solnit
@MattSolnit: Все еще не повезло.
Аликс Аксель
mpstat предоставляется пакетом sysstat на Debian и на Ubuntu . Я ожидаю, что большинство производных от Debian дистрибутивов используют одно и то же имя пакета. В дистрибутивах, основанных на Debian, начните с apt-cache search --full mpstat.
CVn
2

Если явно не настроено не (то есть, закрепление процесса на конкретном процессоре), можно предположить, что все ядра используются постоянно. Планировщик выделит процессам следующее доступное ядро. Например, «Системный монитор» (часть GNOME) показывает, что моя нагрузка почти одинакова на всех 4 ядрах моей машины.

EmmEff
источник
Я отправляю достаточное количество фоновых заданий на сервер, поэтому мне нравится писать сценарий bash, чтобы проверить перед отправкой задания, не слишком ли много запущенных заданий (процессов), потому что я должен позволить другим пользователям иметь достаточно ядер, чтобы использовать для своей работы. Поэтому я хотел бы знать, какая команда bash может сказать мне, сколько ядер используется моей работой сейчас.
Тим
3
Я не думаю, что вы поняли мой ответ. Количество используемых ядер ВСЕГДА общее количество доступных ядер. Используйте общую загрузку системы в качестве фактора, чтобы определить, нужно ли регулировать подачу работы.
EmmEff
Спасибо! Я проверяю общую нагрузку на систему. Один из моих коллег сказал мне, что я не могу использовать все основные функции, потому что кто знает, что другие скоро будут работать, и мои работы будут продолжаться довольно долго. Вы также думаете, что я должен ограничить ядра, которые я использую?
Тим
2

Итак, вы увидите здесь ответы, которые расскажут вам, как используются ваши ядра.

ОДНАКО - это на самом деле не делает вам услугу. Вы сделали базовое предположение, которое просто не имеет места - что ваши рабочие места будут стремиться сгруппировать себя в некоторое подмножество ядер.

Вместо этого ваши задания будут распределены по всем ядрам, если вы не реализуете что-то, что каким-то образом удерживает их. (Примечание: я не рекомендую этого; просто говорю «если»)

Вот альтернативная стратегия: Определите для вашей конкретной системы, что такое уровень НАГРУЗКИ, когда вы чувствуете, что для других пользователей «приемлемо» добавлять больше заданий. Затем создайте что-то, что отправляет новое фоновое задание только тогда, когда уровень нагрузки ниже этого предела.

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

PBR
источник
Я только сейчас заметил комментарий, который вы добавили к ответу другого автора, и это указывает на то, что коллега сказал вам. Так что, действительно, кажется, что это заблуждение принадлежит ему, а не вам. Прости за это!
PBR
Спасибо! Что касается «Определите для вашей конкретной системы, что такое уровень НАГРУЗКИ, когда вы чувствуете, что для других пользователей« добавление дополнительных заданий »является приемлемым», если текущая загрузка в основном не вызвана моими запущенными заданиями, тогда я чувствую себя более свободным в использовании. остальные процессоры, но если при текущей нагрузке мои текущие задания занимают изрядное количество, то мне, вероятно, придется отказаться от использования остальных процессоров. Так вы все еще думаете, что мне не нужно оценивать загрузку ЦП моих общих рабочих мест?
Тим
Нет, я действительно не думаю, что имеет смысл различать, какая часть текущей нагрузки зависит от вашей работы и других работ. Рассмотрим простоту: ваша работа старается быть хорошим гражданином и подчиняется, только если нагрузка ниже уровня, который вы считаете приемлемым. Идея в том, чтобы НИКОГДА не использовать всю оставшуюся емкость; что оставляет других будущих пользователей в безвыходном положении. В идеале все пользователи будут использовать одну и ту же логику для этого.
PBR
2

Если вы хотите сделать это так, чтобы он работал на Linux и OS X, вы можете сделать:

CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)
tim_yates
источник
1

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

dmckee
источник
Мне нравится знать команду bash, которая может сообщить мне число, поскольку я хочу использовать ее в сценарии bash.
Тим
@Tim topможет работать в пакетном режиме с ключом -b. Объедините его с ключом -n, чтобы получить необходимое количество итераций.
Нагуль
1
Можете ли вы привести пример кода для получения количества ядер, используемых всеми заданиями (процессами), представленными пользователем?
Тим
@ Времени нет. Мне нужно было бы написать такой скрипт, проанализировав topвывод, или Google, чтобы увидеть, сделал ли это кто-то уже. Тем не менее, я не уверен, что это стоит затраченных усилий, потому что я думаю, что я получу разные результаты для каждого прогона, учитывая скорость, с которой происходит переключение контекста. Разве система не является достаточно хорошим индикатором? Он эффективно сообщает вам, сколько виртуальных ядер требуется для обработки очереди процессов (процессов, ожидающих на процессоре).
Нагуль
@ nagul: Да, нагрузка на систему хорошая, и я тоже это проверяю. Однако некоторые люди продолжают говорить мне, что я не могу использовать все ядра, потому что кто знает, что другие скоро будут работать. Поэтому я думаю, что я должен ограничить количество ядер, которые я использую. Кстати, вы когда-нибудь видели онлайн-скрипты, которые проверяют загрузку процессора и памяти и динамически отправляют задания в зависимости от использования? Я искал их так долго. Благодарность!
Тим