30

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

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

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

6 ответов6

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 .

2

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

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

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

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

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

2

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

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

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

1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .