Các phương thức có sẵn để có được việc sử dụng CPU trong dòng lệnh Linux là gì? [đóng cửa]


12

Chúng tôi biết rằng đó toplà một lệnh để có được việc sử dụng CPU trong Linux và các cách khác bao gồm cat /proc/statsử dụng hàng đầu.

Các phương pháp khác để có được việc sử dụng CPU trong dòng lệnh Linux là gì?

Kịch bản ca sử dụng: Đầu ra của lệnh này sẽ được sử dụng bởi một tập lệnh để ghi nhật ký sử dụng CPU liên tục. top/proc/statđưa ra cách sử dụng chi tiết rất khó đăng nhập. Có cách nào dễ dàng hơn để lấy thông tin CPU không?


3
Có gì sai với những người bạn trích dẫn?
pataluc

@pataluc Nó cung cấp thông tin chi tiết hơn. Tôi cần sử dụng CPU tổng thể nói CPU được sử dụng: 91% Mem Được sử dụng: 78% Mem miễn phí: 22% tương tự như thế này ..
fasil

xem câu trả lời của Nathan ... bạn có thể sedbiết kết quả nếu bạn chỉ muốn giá trị.
pataluc

Bỏ phiếu để đóng là "không mang tính xây dựng". Từ superuser.com/help/dont-ask : " Để ngăn câu hỏi của bạn bị gắn cờ và có thể bị xóa, hãy tránh đặt câu hỏi chủ quan trong đó câu trả lời của bạn được cung cấp cùng với câu hỏi và bạn mong đợi nhiều câu trả lời hơn: 'Tôi sử dụng ______ cho ______ , bạn dùng gì?' "
bwDraco

3
@DragonLord thực sự, có rất nhiều cách để làm điều này và hai câu trả lời ở đây thực sự hữu ích. Mine chỉ ra một quan niệm sai lầm rất phổ biến topvà cái còn lại đưa ra một mệnh lệnh rất hữu ích. Nó không phải là tôi sử dụng X, bạn thấy thế nào? câu hỏi, nhưng làm thế nào để tôi làm câu hỏi X. Bỏ phiếu để mở lại.
terdon

Câu trả lời:


14

Như những người khác đã nói, cách tốt nhất có lẽ là top. Nó cần một chút tinh chỉnh và một chút phân tích cú pháp nhưng bạn có thể lấy nó để cung cấp cho bạn mức sử dụng CPU hiện tại dưới dạng phần trăm.

topphân chia việc sử dụng CPU giữa người dùng, quy trình hệ thống và nicequy trình, chúng tôi muốn tổng của ba. Vì vậy, chúng ta có thể chạy toptrong bchế độ atch cho phép chúng ta phân tích đầu ra của nó. Tuy nhiên, như đã giải thích ở đây , lần lặp đầu tiên top -btrả về tỷ lệ phần trăm kể từ khi khởi động, do đó chúng ta cần ít nhất hai lần lặp ( -n 2) để có được tỷ lệ phần trăm hiện tại. Để tăng tốc mọi thứ, bạn có thể đặt delay giữa các lần lặp thành 0.01. Cuối cùng, bạn có grepdòng chứa tỷ lệ phần trăm CPU và sau đó sử dụng gawkđể tính tổng các quy trình của người dùng, hệ thống và tốt đẹp:

    top -bn 2 -d 0.01 | grep '^%Cpu' | tail -n 1 | gawk '{print $2+$4+$6}'
        -----  ------   -----------    ---------   ----------------------
          |      |           |             |             |------> add the values
          |      |           |             |--> keep only the 2nd iteration
          |      |           |----------------> keep only the CPU use lines
          |      |----------------------------> set the delay between runs
          |-----------------------------------> run twice in batch mode

Tôi nghĩ bạn cũng có thể có được thông tin này thông qua ps -o pcpu axviệc thêm% sử dụng của mỗi quy trình đang chạy. Thật không may, như được giải thích ở đây , ps"trả về phần trăm thời gian chạy trong toàn bộ thời gian của một quá trình" không phải là thứ bạn cần.


BIÊN TẬP

Dựa trên nhận xét của bạn, phiên bản của bạn topkhác với tôi và bạn nên sử dụng phiên bản này thay thế:

top -bn 2 -d 0.01 | grep '^Cpu.s.' | tail -n 1 | gawk '{print $2+$4+$6}'

Và, để tránh các vấn đề với nội địa hóa, hãy đặt ngôn ngữ thành C:

LC_ALL=C top -bn 2 -d 0.01 | grep '^Cpu.s.' | tail -n 1 | gawk '{print $2+$4+$6}'

Tôi đã xóa câu trả lời của tôi vì những gì bạn nói là chính xác. Điều này dường như là một phương pháp hợp lệ.
Nathan C

@NathanC Tôi nghĩ câu trả lời của bạn cũng đúng, đó là những gì tôi sẽ trả lời. Sau đó, tôi đã thử nó và rất ngạc nhiên :).
terdon

@terdon Cảm ơn câu trả lời chi tiết của bạn ... Tôi không thể lấy đầu ra cho lệnh trên. Có bất kỳ sửa đổi cú pháp nào được yêu cầu không ..
fasil

@fasil không, nó sẽ hoạt động. Vấn đề là gì? Bất kỳ thông báo lỗi?
terdon

@terdon Tôi không nhận được bất kỳ đầu ra nào cho lệnh hoàn chỉnh .. với #top -bn 2 -d 0,01 Tôi nhận được kết quả đầy đủ nhưng khi thêm grep '^% Cpu' Tôi không thấy bất kỳ đầu ra nào chỉ là lời nhắc không trả về lỗi ...
fasil

9

sarlà cách dứt khoát để làm điều đó. Vì vậy, ví dụ sar -usẽ xuất ra một cái gì đó như thế này:

08:30:01 AM       CPU     %user     %nice   %system   %iowait     %idle
08:40:01 AM       all      6.94      0.00      1.77      4.92     86.36
08:50:01 AM       all      5.73      0.00      2.31     12.72     79.24
09:00:01 AM       all      5.95      0.00      2.58     18.36     73.11
09:10:01 AM       all      6.88      0.00      2.22     17.44     73.45
09:20:01 AM       all      8.61      0.00      2.68     27.93     60.78

Bạn không nói bạn sử dụng Linux nào nhưng với CentOS / RedHat bạn cần cài đặt sysstatgói và tôi nghĩ nó giống với Debian / Ubuntu.

Bạn cũng có thể sử dụng sar để thu thập số liệu thống kê ad hoc :

sar -o /tmp/sar.out 60 600

Sẽ thu thập số liệu thống kê cứ sau 60 giây 600 lần, vì vậy 600 phút.


1
Bạn có lẽ nên cụm từ nó khác nhau. Dòng bạn đăng sẽ đo cứ sau 60 giây, 600 lần. Cách tôi đọc bài viết của bạn là 600 là một khoảng thời gian, vì vậy nếu tôi đặt 30 600, cứ sau 30 giây sẽ mất 30 giây, tuy nhiên thực tế sẽ mất 30 giây một lần.
James McDonnell
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.