Có bao nhiêu lõi tôi đang sử dụng trên Máy chủ Linux?


30

Tôi chỉ tự hỏi làm thế nào tôi có thể tìm ra trong bash có bao nhiêu lõi CPU mà người dùng hiện đang sử dụng trên Máy chủ Linux?

Tôi đang gửi một số lượng lớn các công việc nền cho máy chủ, vì vậy tôi muốn viết một tập lệnh bash để kiểm tra trước khi tôi gửi một công việc nếu các công việc đang chạy (quy trình) do tôi gửi quá nhiều, vì tôi phải để việc khác Người dùng có đủ lõi để sử dụng cho công việc của họ. Tôi muốn biết lệnh bash nào có thể cho tôi biết có bao nhiêu lõi công việc của tôi đang sử dụng.

Cảm ơn và trân trọng!

Câu trả lời:


39

Để có được số lượng lõi CPU trên mỗi CPU:

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

Hoặc để lấy số lượng CPU vật lý :

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

Làm thế nào để kiểm tra điều này cho một người dùng nhất định?
makis

26

Tôi không biết có giúp được gì không, nhưng bạn có thể sử dụng mpstattiện ích để phân tích mức độ sử dụng CPU của từng bộ xử lý (hoặc lõi). Ví dụ:

$ 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

Trong ví dụ này, bạn có thể nhìn thấy của CPU đó 0, 16đang làm việc nhiều hơn phần còn lại của họ. Đôi khi bạn sẽ thấy rằng một CPU duy nhất ở gần (hoặc ở mức 100%) trong khi các CPU khác ở mức 0. Đây có thể là một chỉ báo của chương trình (hoặc một phần của chương trình) là một luồng đơn và chỉ có thể sử dụng một CPU duy nhất tại một thời điểm.

Để cài đặt mpstattrên hệ thống Fedora, RHEL hoặc CentOS, hãy sử dụng yum install sysstat.


Cảm ơn một triệu người đã cung cấp câu trả lời này! Các đồng nghiệp của tôi đã sử dụng lệnh "trên cùng" và đưa ra tất cả các kết luận sai về việc sử dụng bộ xử lý cho đến khi tôi chỉ cho họ lệnh mpstat.
Nav

Không khả dụng trên Ubuntu : # aptitude search mpstat #.
Alix Axel

2
@AlixAxel thử aptitude search systatthay thế.
Matt Solnit

@MattSolnit: Vẫn không gặp may.
Alix Axel

mpstat được cung cấp bởi gói sysstat trên Debiantrên Ubuntu . Tôi hy vọng hầu hết các bản phân phối có nguồn gốc Debian sử dụng cùng tên gói. Trên các bản phân phối có nguồn gốc từ Debian, hãy bắt đầu bằng apt-cache search --full mpstat.
một CVn

2

Trừ khi được cấu hình rõ ràng không (ví dụ: ghim một quy trình vào CPU cụ thể), tất cả các lõi có thể được coi là được sử dụng mọi lúc. Bộ lập lịch sẽ phân bổ các quy trình lõi có sẵn tiếp theo. Trường hợp cụ thể, "Giám sát hệ thống" (một phần của Gnome) đang hiển thị tải của tôi gần như giống nhau trên tất cả 4 lõi của máy.


Tôi đang gửi một số lượng công việc nền cho máy chủ, vì vậy tôi muốn viết một tập lệnh bash để kiểm tra trước khi tôi gửi một công việc nếu các công việc đang chạy (quy trình) do tôi gửi quá nhiều, vì tôi phải để người dùng khác có đủ lõi để sử dụng cho công việc của họ. Vì vậy, tôi muốn biết lệnh bash nào có thể cho tôi biết có bao nhiêu lõi công việc của tôi đang sử dụng.
Tim

3
Tôi không nghĩ bạn hiểu câu trả lời của tôi. Số lượng lõi đang sử dụng LUÔN LUÔN tổng số lõi có sẵn. Sử dụng tải toàn bộ hệ thống như một yếu tố để xác định xem liệu công việc của bạn có nên được điều chỉnh hay không.
EmmEff

Cảm ơn bạn! Tôi kiểm tra tải toàn bộ hệ thống. Tôi đã được một trong những đồng nghiệp của tôi nói rằng tôi không thể sử dụng hết tất cả các lõi vì ai biết người khác sẽ điều hành công việc của họ sớm và công việc của tôi sẽ tồn tại khá lâu. Bạn cũng nghĩ rằng tôi phải hạn chế các lõi tôi đang sử dụng?
Tim

2

Vì vậy, bạn sẽ thấy có những phản hồi ở đây sẽ cho bạn biết lõi của bạn đang được sử dụng như thế nào.

TUY NHIÊN - đây không thực sự là một dịch vụ cho bạn. Bạn đã đưa ra một giả định cơ bản rằng chỉ cần không nắm giữ - rằng công việc của bạn sẽ có xu hướng tự nhóm vào một số tập hợp con của lõi.

Thay vào đó, công việc của bạn sẽ được trải đều trên tất cả các lõi, trừ khi bạn thực hiện một cái gì đó khiến chúng "chấp bút" bằng cách nào đó. (Lưu ý: Tôi không khuyến nghị điều đó; chỉ nói, "trừ khi")

Đây là một chiến lược thay thế: Xác định cho hệ thống cụ thể của bạn mức LOAD là gì khi bạn cảm thấy "người dùng khác" có thể thêm nhiều việc làm hơn. Sau đó, xây dựng một cái gì đó chỉ gửi một công việc nền mới khi mức tải xuống dưới giới hạn đó.

Bằng cách đó, giải pháp sẽ độc lập với số lượng lõi, dễ mang theo hơn, linh hoạt hơn và cũng dễ dàng "điều chỉnh" hơn.


Bây giờ tôi mới nhận thấy một bình luận bạn thêm vào câu trả lời của người đăng khác, cho biết điều này là do một điều mà một đồng nghiệp đã nói với bạn. Vì vậy, thực sự, có vẻ như quan niệm sai lầm là của anh ấy, không phải của bạn. Xin lỗi vì điều đó!
pbr

Cảm ơn bạn! Đối với "Xác định cho hệ thống cụ thể của bạn mức LOAD là gì khi bạn cảm thấy" người dùng khác "có thể thêm nhiều việc làm", nếu tải hiện tại không chủ yếu do công việc đang chạy của tôi gây ra thì tôi sẽ cảm thấy tự do hơn khi sử dụng các CPU còn lại, nhưng nếu trong tải hiện tại, các công việc đang chạy của tôi có số tiền khá lớn thì có lẽ tôi phải từ bỏ sử dụng các CPU còn lại. Vì vậy, bạn có nghĩ rằng tôi không phải ước tính mức sử dụng CPU trong tổng số công việc đang chạy của mình không?
Tim

Không, tôi thực sự không nghĩ rằng nên phân biệt giữa bao nhiêu tải hiện tại từ công việc của bạn so với các công việc khác. Hãy xem xét sự đơn giản: công việc của bạn cố gắng trở thành một công dân tốt và chỉ tự nộp nếu tải dưới mức mà bạn cho là chấp nhận được. Ý tưởng là KHÔNG BAO GIỜ để sử dụng tất cả các năng lực còn lại; khiến người dùng tương lai khác bị ràng buộc. Lý tưởng nhất là tất cả người dùng sẽ sử dụng cùng một logic cho việc này.
pbr

2

Nếu bạn muốn làm điều này để nó hoạt động trên linux và OS X, bạn có thể làm:

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

1

Bạn có thể có được ước tính sơ bộ bằng cách chạy top, nhấn ' U' và chỉ định tên người dùng của mình, sau đó thêm việc sử dụng CPU cho một vài quy trình hàng đầu của bạn.


Tôi muốn biết một lệnh bash có thể cho tôi biết số, vì tôi muốn sử dụng nó trong tập lệnh bash.
Tim

@Tim topcó thể chạy trong chế độ hàng loạt với công tắc -b. Kết hợp nó với công tắc -n để có được số lần lặp bạn cần.
nagul

1
bạn có thể đưa ra một ví dụ về mã để có được số lượng lõi được sử dụng bởi tất cả các công việc (quy trình) được gửi bởi người dùng không?
Tim

@Tim Không tắt dơi. Tôi sẽ phải viết một tập lệnh như vậy bằng cách phân tích cú pháp topđầu ra hoặc google để xem ai đó đã thực hiện chưa. Tuy nhiên, tôi không tin rằng nó đáng để nỗ lực vì tôi nghĩ rằng tôi sẽ nhận được các kết quả đầu ra khác nhau cho mỗi lần chạy với tốc độ chuyển đổi ngữ cảnh xảy ra. Không phải hệ thống tải là một chỉ báo đủ tốt? Nó có hiệu quả cho bạn biết có bao nhiêu lõi ảo được yêu cầu để xử lý hàng đợi quá trình (các tiến trình đang chờ trên CPU).
nagul

@ nagul: Có tải hệ thống là tốt và tôi cũng kiểm tra điều đó. Tuy nhiên, một số người tiếp tục nói với tôi rằng tôi không thể sử dụng hết tất cả các lõi vì ai biết người khác sẽ điều hành công việc của họ sớm. Vì vậy, tôi đoán tôi phải hạn chế các lõi tôi đang sử dụng. Nhân tiện, bạn đã thấy một số kịch bản trực tuyến kiểm tra tải CPU và bộ nhớ và tự động gửi công việc dựa trên việc sử dụng chưa? Tôi đã tìm kiếm chúng rất lâu. Cảm ơn!
Tim
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.