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

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

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

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

6 ответов

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

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

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

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

Я не знаю, поможет ли это, но вы можете использовать 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,

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам