Làm cách nào tôi có thể nhận được số liệu thống kê CPU giống như từ vỏ?


12

Tôi đang cố gắng để đọc chính xác CPU đã sử dụng của mình (tính bằng phần trăm) top. Đây là lệnh tôi đang chạy để thử nghiệm:

top -n1 | awk '/Cpu\(s\):/ {print $2}'

Điều này trả về:

10.7%us,

Đó là phần thích hợp của dữ liệu tôi muốn. Tuy nhiên, mỗi khi tôi chạy lệnh tôi nhận được cùng một đầu ra, mặc dù tôi đang áp dụng các tải khác nhau trên hệ thống của mình (và không đề cập đến htopcho tôi biết cách sử dụng của tôi là khác nhau). Dường như bất cứ khi nào tôi bắt đầu top, việc sử dụng CPU của tôi đều giống nhau. Chỉ sau một vài khung hình, nó mang lại cho tôi những giá trị phù hợp.

Có vẻ như tôi không thể phân tích kết quả đầu ra theo cách này, vì vậy tôi đang tìm kiếm các ứng dụng đáng tin cậy khác sẽ cho tôi đọc chính xác từ trình bao. Tôi thực sự thích làm thế nào htopcó thể cho tôi đọc một lõi.

Tôi đã thử iostatmpstatdường như chúng đưa ra các giá trị không chính xác và "chậm thay đổi".


2
Đừng. Câu hỏi thích hợp là: Làm thế nào để tôi có được số liệu thống kê sử dụng CPU hàng đầu từ vỏ?
Stéphane Gimenez

@ StéphaneGimenez cảm ơn tôi đã sửa đổi câu hỏi của mình
n0pe

Câu trả lời:


12

Tôi sử dụng tập lệnh này (từ chuỗi này trên bảng Arch ):

#!/bin/bash
read cpu a b c previdle rest < /proc/stat
prevtotal=$((a+b+c+previdle))
sleep 0.5
read cpu a b c idle rest < /proc/stat
total=$((a+b+c+idle))
CPU=$((100*( (total-prevtotal) - (idle-previdle) ) / (total-prevtotal) ))

Linux có một số thông tin tuyệt vời trong / Proc / - xem linux.die.net/man/5/proc cho tất cả các tính năng. Chỉ cần lưu ý rằng đây là Linux mà thôi. Thực sự không có cách nào đa nền tảng để có được thông tin đó trừ khi bạn sử dụng thư viện như Sigar .
Pat Notz

Ý tưởng là tốt, nhưng một số chi tiết không chính xác. Giá trị nhàn rỗi là cột thứ 5 và bạn cũng nên thêm cột iowait (cột thứ 6) để có được tỷ lệ phần trăm hợp lý. Để hoàn toàn chính xác, bạn cũng phải thêm tất cả các giá trị "phần còn lại", nhưng chúng thường rất nhỏ.
Peter Eisentraut 7/2/13

Giá trị nhàn rỗi là cột thứ năm, nếu bạn đang đếm cột "cpu". Nếu không, nó là thứ tư.
SunSparc

6

Kiểm tra sar , là tốt. Việc triển khai có thể khác nhau từ nix đến nix, nhưng nó sẽ cung cấp cho bạn các số liệu thống kê hệ thống cơ bản, tại các ảnh chụp nhanh nhất định. Tôi không chắc chắn cách chính xác các giá trị tại thời điểm mà tại đó các lệnh được đầu tiên khởi, nhưng bạn có thể chơi xung quanh để xem nó như thế nào so với top, iostatvv

Đầu ra dựa trên cột, giống như trên cùng, vì vậy bạn sẽ có thể dẫn đầu ra thành awkhoặc cutđể thao tác kết quả.


Tôi đã thử sartrước đây với kết quả hỗn hợp. Tôi sẽ đi với câu trả lời của @ jasonwryan ở đây vì tôi có thể dễ dàng sửa đổi nó để thể hiện việc sử dụng với cả hai lõi CPU của mình.
n0pe


0

Những gì tôi tìm thấy tương tự như người đã hỏi câu hỏi ở trên, ít nhất là trên CentOS 6. Nếu tôi chạy top ở chế độ hàng loạt chỉ trong một lần lặp, nó dường như thu thập cùng một con số, gần như là xu hướng của nó là bắt đầu với những gì Nó nhớ lần cuối hiển thị. Top dường như cần phải tích lũy ít nhất một vài số liệu để có được đồng bằng để cung cấp cho bạn tỷ lệ phần trăm chính xác. Đã thử qua hơn 10 lần lặp lại, tôi thấy rằng hình thứ hai xuất hiện cho thấy sự khác biệt đủ trên mỗi lần chạy. Vì vậy, nó đủ dễ dàng để có được dòng này thông qua

top -b -n 2 | grep Cpu | tail -1

Tôi thích kết hợp điều này với thời gian hoạt động để tải và bộ lọc grep của các quy trình được chọn từ ps, chẳng hạn như truy vấn postgres. Một màn hình rất đơn giản có thể được biểu thị bằng bí danh:

alias postgresmon="watch -d 'uptime;top -b -n 2 | grep Cpu | tail -1;ps -ef | grep postgres\: | grep -v idle'"
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.