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

28453
Tim

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

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

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

30

6 ответов на вопрос

39
Alix Axel

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

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

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

grep "^physical id" /proc/cpuinfo | sort -u | wc -l 
25
Matt Solnit

Я не знаю, поможет ли это, но вы можете использовать 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 13 лет назад 0
Недоступно в Ubuntu: `# aptitude search mpstat #`. Alix Axel 11 лет назад 0
@AlixAxel попробуйте `aptitude search systat`. Matt Solnit 11 лет назад 2
@MattSolnit: Все еще не повезло. Alix Axel 11 лет назад 0
mpstat предоставляется пакетом `sysstat` [в Debian] (https://packages.debian.org/jessie/sysstat) и [в Ubuntu] (http://packages.ubuntu.com/xenial/sysstat). Я ожидаю, что большинство производных от Debian дистрибутивов используют одно и то же имя пакета. В дистрибутивах, производных от Debian, начните с `apt-cache search --full mpstat`. a CVn 7 лет назад 0
Это лучший ответ - поскольку он показывает, что делает каждое ядро. Он работает прямо из коробки на сервере Centos 6. itoctopus 7 лет назад 0
2
EmmEff

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

Я отправляю достаточное количество фоновых заданий на сервер, поэтому мне нравится писать сценарий bash, чтобы проверить перед отправкой задания, не слишком ли много запущенных заданий (процессов), потому что я должен позволить другим пользователям достаточно ядер, чтобы использовать для своей работы. Поэтому мне нравится знать, какая команда bash может сказать мне, сколько ядер используется моей работой сейчас. Tim 14 лет назад 0
I don't think you understood my answer. The number of cores in use is ALWAYS the total number of cores available. Use the overall system load as a factor to determine whether or not your job submission should be throttled. EmmEff 14 лет назад 3
Спасибо! Я проверяю общую нагрузку на систему. Один из моих коллег сказал мне, что я не могу использовать все основные функции, потому что кто знает, что другие будут работать в ближайшее время, и мои работы будут продолжаться довольно долго. Вы также думаете, что я должен ограничить ядра, которые я использую? Tim 14 лет назад 0
2
pbr

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

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

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

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

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

I just now noticed a comment you added to another poster's answer, indicating this is because of something a colleague told you. So, indeed, it appears that the misconception is his, not yours. Sorry about that! pbr 14 лет назад 0
Спасибо! Что касается «Определите для вашей конкретной системы, что такое уровень НАГРУЗКИ, когда вы чувствуете, что для других пользователей« добавление дополнительных заданий »является приемлемым», если текущая нагрузка в основном не вызвана моими запущенными заданиями, тогда я чувствую себя более свободно остальные процессоры, но если при текущей нагрузке мои текущие задания занимают изрядное количество, то мне, вероятно, придется отказаться от использования остальных процессоров. Так вы все еще думаете, что мне не нужно оценивать загрузку ЦП моих общих рабочих мест? Tim 14 лет назад 0
No, I really don't think it makes sense to distinguish between how much of the current load is from your jobs vs. other jobs. Consider the simplicity: your job tries to be a good citizen, and only submits itself if the load is below a level which you consider acceptable. The idea is NEVER to utilize all the remaining capacity; that leaves other future users in a bind. Ideally, all of the users would be using the same logic for this. pbr 14 лет назад 0
2
tim_yates

If you want to do this so it works on linux and OS X, you can do:

CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu) 
1
dmckee

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

Мне нравится знать команду bash, которая может сообщить мне число, поскольку я хочу использовать ее в сценарии bash. Tim 14 лет назад 0
@Tim `top` может работать в пакетном режиме с ключом -b. Объедините его с ключом -n, чтобы получить необходимое количество итераций. nagul 14 лет назад 0
Можете ли вы привести пример кода для получения количества ядер, используемых всеми заданиями (процессами), представленными пользователем? Tim 14 лет назад 1
@ Времени нет. Мне нужно было бы написать такой скрипт, проанализировав вывод `top` или google, чтобы увидеть, сделал ли это кто-то уже. Тем не менее, я не уверен, что это стоит затраченных усилий, потому что я думаю, что я получу разные результаты для каждого запуска, учитывая скорость, с которой происходит переключение контекста. Разве система не является достаточно хорошим индикатором? Он эффективно сообщает вам, сколько виртуальных ядер требуется для обработки очереди процессов (процессов, ожидающих на процессоре). nagul 14 лет назад 0
@ nagul: Да, нагрузка на систему хорошая, и я тоже это проверяю. Однако некоторые люди продолжают говорить мне, что я не могу использовать все ядра, потому что кто знает, что другие скоро будут работать. Поэтому я думаю, что я должен ограничить ядра, которые я использую. Кстати, вы когда-нибудь видели онлайн-скрипты, которые проверяют загрузку процессора и памяти и динамически отправляют задания в зависимости от использования? Я искал их так долго. Спасибо! Tim 14 лет назад 0
Попытка подсчитать количество ядер - это неправильный способ распределения ресурсов процессора. Это работа ядра. Чтобы настроить его, используйте `[re] nice`, или, если этого недостаточно, получите менеджер очередей, такой как` pbs`. dmckee 14 лет назад 0
Соответствующая ссылка: http://superuser.com/questions/49020/linux-queuing-system dmckee 14 лет назад 0
@ Я бы предложил другой подход. Как говорит EmmEff, оба ядра * будут использоваться до тех пор, пока нагрузка на систему будет выше 1,0. Есть скрипт, который анализирует вывод `top`, чтобы получить% загрузки ЦП для ваших процессов, и, если совокупное использование превышает указанный порог, понижает их приоритет с помощью` nice`. Или, что еще лучше, если вам абсолютно необходимо убедиться, что вы не включаете все ядра, привяжите * все * процессы к одному ядру: http://www.cyberciti.biz/tips/setting-processor-affinity-termin-task- или-process.html nagul 14 лет назад 0
@ nagul: Спасибо! Я наконец сделал это, анализируя вершину Tim 14 лет назад 0

Похожие вопросы