Sử dụng CPU Linux và Lịch sử thực thi quy trình


38

Có cách nào để xem quá trình nào gây ra việc sử dụng CPU nhiều nhất không?

Tôi có AMAZON EC2 Linux mà việc sử dụng CPU đạt 100% và khiến tôi phải khởi động lại hệ thống. Tôi thậm chí không thể đăng nhập thông qua SSH (Sử dụng putty).

Có cách nào để xem nguyên nhân gây ra việc sử dụng CPU cao như vậy và quá trình nào gây ra điều đó không?

Tôi biết sarvà ra toplệnh nhưng tôi không thể tìm thấy lịch sử thực hiện quy trình ở bất cứ đâu. Dưới đây là hình ảnh từ công cụ giám sát Amazon EC2, nhưng tôi muốn biết quá trình nào gây ra điều đó:

nhập mô tả hình ảnh ở đây

Tôi cũng đã thử ps -eo pcpu,args | sort -k 1 -r | head -100nhưng không may mắn tìm thấy việc sử dụng CPU cao như vậy.

Câu trả lời:


34

Có một vài cách có thể bạn có thể làm điều này. Lưu ý rằng nó hoàn toàn có thể có nhiều quá trình trong một kịch bản chạy trốn gây ra điều này, không chỉ một.

Cách đầu tiên là thiết lập pidstat để chạy trong nền và tạo dữ liệu.

pidstat -u 600 >/var/log/pidstats.log & disown $!

Điều này sẽ cung cấp cho bạn một triển vọng khá chi tiết về hoạt động của hệ thống trong khoảng thời gian mười phút. Tôi sẽ đề nghị đây là cổng gọi đầu tiên của bạn vì nó tạo ra dữ liệu đáng tin cậy / đáng tin cậy nhất để làm việc.

Có một vấn đề với điều này, chủ yếu là nếu hộp đi vào vòng lặp cpu chạy trốn và tạo ra tải rất lớn - bạn không đảm bảo rằng quy trình thực tế của bạn sẽ thực hiện kịp thời trong quá trình tải (nếu có) để bạn thực sự có thể bỏ lỡ đầu ra !

Cách thứ hai để tìm kiếm điều này là cho phép kế toán quy trình. Có thể nhiều hơn của một lựa chọn dài hạn.

accton on

Điều này sẽ cho phép kế toán quá trình (nếu chưa được thêm). Nếu nó không chạy trước thì sẽ cần thời gian để chạy.

Đã được chạy, trong 24 giờ - bạn có thể chạy một lệnh như vậy (sẽ tạo ra kết quả như thế này)

# sa --percentages --separate-times
     108  100.00%       7.84re  100.00%       0.00u  100.00%       0.00s  100.00%         0avio     19803k
       2    1.85%       0.00re    0.05%       0.00u   75.00%       0.00s    0.00%         0avio     29328k   troff
       2    1.85%       0.37re    4.73%       0.00u   25.00%       0.00s   44.44%         0avio     29632k   man
       7    6.48%       0.00re    0.01%       0.00u    0.00%       0.00s   44.44%         0avio     28400k   ps
       4    3.70%       0.00re    0.02%       0.00u    0.00%       0.00s   11.11%         0avio      9753k   ***other*
      26   24.07%       0.08re    1.01%       0.00u    0.00%       0.00s    0.00%         0avio      1130k   sa
      14   12.96%       0.00re    0.01%       0.00u    0.00%       0.00s    0.00%         0avio     28544k   ksmtuned*
      14   12.96%       0.00re    0.01%       0.00u    0.00%       0.00s    0.00%         0avio     28096k   awk
      14   12.96%       0.00re    0.01%       0.00u    0.00%       0.00s    0.00%         0avio     29623k   man*
       7    6.48%       7.00re   89.26%       0.00u    0.00%       0.00s    

Các cột được sắp xếp như vậy:

  1. Số lượng cuộc gọi
  2. Tỷ lệ cuộc gọi
  3. Lượng thời gian thực dành cho tất cả các quy trình thuộc loại này.
  4. Tỷ lệ phần trăm.
  5. Thời gian CPU của người dùng
  6. Tỷ lệ phần trăm
  7. Thời gian CPU hệ thống.
  8. Các cuộc gọi IO trung bình.
  9. Tỷ lệ phần trăm
  10. Tên lệnh

Những gì bạn sẽ tìm kiếm là các loại quy trình tạo ra thời gian CPU Người dùng / Hệ thống nhiều nhất.

Điều này phá vỡ dữ liệu dưới dạng tổng thời gian CPU (hàng trên cùng) và sau đó cách thức thời gian CPU đó được phân chia. Kế toán quy trình chỉ hạch toán đúng khi nó khởi động khi quá trình sinh sản, vì vậy có lẽ tốt nhất là khởi động lại hệ thống sau khi cho phép nó đảm bảo tất cả các dịch vụ đang được hạch toán.

Điều này, không có nghĩa là thực sự mang đến cho bạn một ý tưởng nhất định quá trình có thể là nguyên nhân của vấn đề này, nhưng có thể mang lại cho bạn cảm giác tốt. Vì nó có thể là một ảnh chụp nhanh 24 giờ có khả năng cho kết quả sai lệch, vì vậy hãy ghi nhớ điều đó. Nó cũng phải luôn luôn đăng nhập vì tính năng kernel của nó và không giống như pidstat sẽ luôn tạo ra đầu ra ngay cả khi tải nặng.

Tùy chọn cuối cùng khả dụng cũng sử dụng kế toán quy trình để bạn có thể bật nó như trên, nhưng sau đó sử dụng chương trình "Lastcomm" để tạo một số thống kê về các quy trình được thực hiện trong khoảng thời gian xảy ra sự cố cùng với thống kê cpu cho từng quy trình.

lastcomm | grep "May  8 22:[01234]"
kworker/1:0       F    root     __         0.00 secs Tue May  8 22:20
sleep                  root     __         0.00 secs Tue May  8 22:49
sa                     root     pts/0      0.00 secs Tue May  8 22:49
sa                     root     pts/0      0.00 secs Tue May  8 22:49
sa                   X root     pts/0      0.00 secs Tue May  8 22:49
ksmtuned          F    root     __         0.00 secs Tue May  8 22:49
awk                    root     __         0.00 secs Tue May  8 22:49

Điều này có thể cung cấp cho bạn một số gợi ý về những gì có thể gây ra vấn đề.


Câu trả lời rất hay và chi tiết, công việc tốt!
Bart De Vos

2
MIfe, bạn chưa sử dụng trên đỉnh hãy dùng thử! Nó thu thập thông tin tương tự như pidstat nhưng trình bày nó trong một giao diện phù hợp hơn nhiều cho việc khám phá tương tác. Nó cũng có một lệnh atopsar nếu bạn thích báo cáo kiểu sar.
tọa

18

Trên đỉnh là một trình nền đặc biệt tiện dụng để xem chi tiết về mức độ xử lý và mặc định lưu trữ dữ liệu này trong 28 ngày. Bên cạnh việc trình bày một giao diện giám sát thời gian thực tuyệt vời, bạn có thể chỉ định các tệp nhật ký đó để mở và bước qua chúng.

Các bài viết đưa ra một số ý tưởng về khả năng, và bạn có thể tìm thấy ở những manpage .

Nó thực sự là một phần mềm tuyệt vời.


3

Các chương trình như psmonmonit có thể hữu ích cho bạn. Chúng có thể giám sát các quá trình đang chạy trên hệ thống của bạn và nếu bất kỳ ngưỡng nào (mức sử dụng CPU, mức sử dụng bộ nhớ ...) bị vượt quá, bạn có thể đặt chúng gửi cho bạn một báo cáo email về những gì đang diễn ra.

Cũng có thể tự động khởi động lại các quy trình xử lý sai.


0

Một giải pháp là viết một tập lệnh được chạy qua một phút cron hoặc trong một vòng lặp ngủ và gửi cho bạn một công việc email / scp / dump đến một khối lượng ebs ... với đầu ra có liên quan (có thể là dmesg, pstree -pa và ps aux vmstat) ngay lập tức nó tìm thấy trung bình tải trên một giới hạn nhất định ...

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.