Viết nhật ký sử dụng CPU / RAM trong một khoảng thời gian để nộp trên CentOS


8

Tôi đang tìm kiếm một ứng dụng hoặc dòng mã cho phép tôi quan sát một quá trình, lưu thông tin vào một số biến, sau đó đặt thông tin thu thập được vào một tệp.

Tôi đã thử với các biến thể của topnhưng không có may mắn. Tôi đang chạy một số máy chủ ảo CentOS, VM là RAM 2 GB, 2 bộ xử lý.

Một tập lệnh hoạt động trong một khoảng thời gian xác định trong khi viết các dòng với thông tin trên tệp văn bản để cuối cùng tôi có thể có một loại bảng với dữ liệu sẽ hoạt động.

Tôi sẽ nhấn mạnh vào việc kiểm tra máy chủ và tôi muốn có dữ liệu để thực hiện một số thống kê.

Câu trả lời:


11

Tiêu chuẩn pslà đủ.

while true; do ps o pcpu,rsz -p $pid | tail -n1 >>usage.log; sleep $interval; done

kết quả:

0.0  3352
0.3 31640
0.4 36924
0.5 36052
...

Trường đầu tiên là mức sử dụng CPU tính theo%, thứ hai là mức sử dụng bộ nhớ vật lý tính bằng kbyte.


Điều đó thật hoàn hảo, tôi đã tạo ra một kịch bản dài để dọn sạch tất cả dữ liệu từ một đầu ra hàng đầu, nhưng cách đơn giản hơn và hiệu quả hơn là tôi đánh giá cao chúng tôi, cảm ơn!
keponk

cuối cùng tôi vẫn tiếp tục sử dụng tập lệnh của mình, vì ps cho tôi mức trung bình tải thường tương đương với% CPU nhưng không phải là quy tắc, thông tin thêm về điều này trong một tìm kiếm nhanh trên google
keponk

1
% CPU ở đây không phải là% được sử dụng trong khoảng thời gian, mà là phần trăm trung bình trong toàn bộ thời gian chạy của chương trình. Tôi tin rằng điều này là sai lệch.
Will Sewell

2

Nếu bạn quan tâm đến thời gian chính xác và muốn CPU theo tỷ lệ phần trăm:

watch --precise -n 1 'top -b -n 1 -p [PID] | tail -n 1 | awk "{print \$9}" >> [PID].log'

1

Tôi sẽ đề nghị sadc/ sar.


Có phải nó chỉ toàn hệ thống?
Whitequark

@whitequark: Nó phụ thuộc vào phiên bản của sar. Một số phiên bản sử dụng sar -x PIDnhững người khác sử dụng pidstat -p PID.
Tạm dừng cho đến khi có thông báo mới.

Trong khi về mặt lý thuyết có thể trả lời câu hỏi, tốt hơn là nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo.
saji89

0

Bạn đang cố gắng quan sát thời gian cpu cần một quá trình cụ thể.

Tôi sẽ đề nghị công cụ thống kê CPU cho CentOS? nhưng điều này có được nó cho toàn bộ hệ thống, không chỉ một quá trình.

Bất kỳ một quá trình sẽ hiển thị thời gian CPU trong đầu ra của ps:

$ ps -ef | egrep blah
root     13988 11152  0 Dec16 ?        00:00:05 sshd: xxx [priv]
xxx      14024 13988  0 Dec16 ?        00:06:00 sshd: xxx@pts/0
xxx      14032 14024  0 Dec16 pts/0    07:00:00 -bash
root      1194   679  0 Apr24 ?        2-05:15:14 [kswapd0]
root      1195   679  0 Apr24 ?        2-06:35:49 [kswapd1]
  • 00:00:00 là giờ / phút / giây của cpu. Nó sẽ tích lũy.
  • Bạn sẽ cần quyền để thấy điều này nếu người dùng không phải là bạn.
  • Khi giá trị này vượt quá một ngày, định dạng sẽ thay đổi; trên 2 ngày. Thói quen phân tích cú pháp của bạn sẽ phải xử lý này.

Tại thời điểm này, phân tích kết quả đầu ra với Python, thực hiện một số phép toán ngày trên nó và bạn là vàng.


0

Lệnh sau lấy mức trung bình của việc sử dụng CPU và bộ nhớ cứ sau 40 giây cho một quy trình cụ thể (pid)

pidstat 40 -ru -p <pid>

Đầu ra cho trường hợp của tôi (hai dòng đầu tiên cho việc sử dụng CPU, hai dòng thứ hai cho bộ nhớ):

02:15:07 PM       PID    %usr %system  %guest    %CPU   CPU  Command
02:15:47 PM     24563    0.65    0.07    0.00    0.73     3  java

02:15:07 PM       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
02:15:47 PM     24563      6.95      0.00 13047972 2123268   6.52  java
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.