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


30

Мене просто цікавить, як я можу дізнатись у баші, скільки ядер процесора зараз користувач використовує на Linux Server?

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

Дякую та з повагою!

Відповіді:


39

Щоб отримати кількість ядер CPU на процесор:

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

Або отримати кількість фізичних процесорів :

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

як це перевірити для певного користувача?
makis

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.


Дякую мільйон за надану цю відповідь! Мої колеги використовували команду "верх" і робили всі неправильні висновки щодо використання процесора, поки я не показав їм команду mpstat.
Nav

Немає прав на Ubuntu: # aptitude search mpstat #.
Алікс Аксель

2
@AlixAxel спробуйте aptitude search systatнатомість.
Мет Солніт

@MattSolnit: Ще не пощастить.
Алікс Аксель

mpstat надається пакетом sysstat на Debian та на Ubuntu . Я б очікував, що більшість дистрибутивів, отриманих Debian, використовують одне і те ж ім'я пакета. На дистрибутивах, отриманих Debian, почніть з apt-cache search --full mpstat.
CVn

2

Якщо явно не налаштовано не (тобто закріплення процесу до певного процесора), можна вважати, що всі ядра використовуються постійно. Планувальник виділить процеси наступним доступним ядром. У конкретному випадку "Монітор системи" (частина GNOME) показує, що моє навантаження майже однакове на всіх 4 ядрах моєї машини.


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

3
Я не думаю, що ти зрозумів мою відповідь. Кількість ядер, що використовуються, ЗАВЖДИ загальна кількість наявних ядер. Використовуйте загальне завантаження системи як фактор, щоб визначити, чи слід подавати заявку на роботу.
EmmEff

Дякую! Я перевіряю загальне завантаження системи. Мені один з колег сказав, що я не можу використовувати всі сердечники, тому що хто знає, хтось скоро працюватиме, і моя робота триватиме досить довго. Ви також вважаєте, що я повинен обмежувати ядра, якими я користуюся?
Тім

2

Тож ви побачите, що тут є відповіді, які підкажуть, як ваші сердечники використовуються.

ЯКЩО - це насправді не надає вам послуги. Ви зробили основне припущення, яке просто не вдається - що ваші завдання, як правило, групуються на деякий підмножина ядер.

Натомість ваші робочі місця будуть розкинуті по всіх ядрах, якщо ви не реалізуєте щось, що змушує їх "забиватися". (Примітка. Я не рекомендую цього; просто кажу: "якщо тільки")

Ось альтернативна стратегія: визначте для вашої конкретної системи, який рівень завантаження, коли ви вважаєте, що "прийнятно" для інших користувачів додавати більше робочих місць. Потім побудуйте щось, що подає нове фонове завдання лише тоді, коли рівень навантаження опуститься нижче цієї межі.

Таким чином, рішення буде незалежним від підрахунку ядра, більш портативним, більш гнучким, а також простішим "підключенням".


Щойно я помітив коментар, який ви додали до відповіді іншого плаката, вказуючи, що це через щось, що сказав вам колега. Отож, справді, виявляється, що оману - це його, а не ваше. Вибач за це!
пбр

Дякую! Щодо "Визначте для вашої конкретної системи, що таке рівень завантаження, коли ви вважаєте, що" прийнятно "для інших користувачів додавати більше робочих місць", якщо поточне навантаження в основному не спричиняється моїми запущеними завданнями, я б почував себе вільніше використовувати решта процесорів, але якщо в поточному навантаженні мої запущені завдання займають неабияку суму, то, ймовірно, мені доведеться відмовитися від використання інших процесорів. Тож ви все ще думаєте, що мені не доведеться оцінювати використання процесора моїх загальних завдань?
Тім

Ні, я дійсно не думаю, що має сенс розмежовувати велику кількість поточного навантаження від вашої роботи порівняно з іншими роботами. Враховуйте простоту: ваша робота намагається бути хорошим громадянином і подає себе лише в тому випадку, якщо навантаження нижче рівня, який ви вважаєте прийнятним. Ідея НІКОЛИ не використовувати всю кількість, що залишилася; що залишає інших майбутніх користувачів пов'язувати. В ідеалі всі користувачі будуть використовувати для цього однакову логіку.
пбр

2

Якщо ви хочете зробити це, щоб це працювало на Linux і OS X, ви можете зробити:

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

1

Ви можете отримати приблизну оцінку, запустивши top, натиснувши " U" та вказавши своє ім'я користувача, а потім додавши використання процесора для ваших кількох перших процесів.


Мені подобається знати команду bash, яка може сказати мені число, оскільки я хочу використовувати її в скрипті bash.
Тім

@Tim topможе працювати в пакетному режимі за допомогою перемикача -b. Поєднайте його за допомогою перемикача -n, щоб отримати необхідну кількість ітерацій.
nagul

1
чи можете ви навести приклад коду для отримання кількості ядер, використовуваних усіма роботами (процесами), поданими користувачем?
Тім

@Tim Не збивається. Я б або повинен був написати такий сценарій, розібравши topвисновок або google, щоб побачити, чи хтось це вже зробив. Однак я не переконаний, що варто докласти зусиль, тому що я думаю, що я отримуватиму різні результати для кожного запуску, враховуючи швидкість, з якою відбувається переключення контексту. Хіба завантаження системи не є достатньо хорошим показником? Це ефективно говорить про те, скільки віртуальних ядер потрібно для обробки черги процесів (процесів, які чекають на процесорі).
nagul

@ nagul: Так, завантаження системи добре, і я також перевіряю це. Однак деякі люди продовжують мені говорити, що я не можу використовувати всі ядра, тому що хто знає інших, незабаром розпочне свою роботу. Тож я гадаю, що мені доведеться обмежувати ядра, якими я користуюся. До речі, ви бачили десь в Інтернеті сценарії, які перевіряють завантаження процесора та пам'яті та динамічно подають завдання на основі використання? Я їх так довго шукав. Спасибі!
Тім
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.