Tại sao tải cao mặc dù thực tế là cả CPU hoặc đĩa đều không được sử dụng quá mức


20

Tôi nhận được đầu ra sau từ top:

Cpu(s): 43.8%us, 32.5%sy,  4.8%ni,  2.0%id, 15.6%wa,  0.2%hi,  1.2%si,  0.0%st
Mem:  16331504k total, 15759412k used,   572092k free,  4575980k buffers
Swap:  4194296k total,   260644k used,  3933652k free,  1588044k cached

đầu ra từ iostat -xk 6hiển thị như sau:

Device: rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda       0.00   360.20   86.20  153.40  1133.60  2054.40    26.61     1.51    6.27   0.77  18.38
sdb       0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdd      22.60   198.80   17.40   31.60   265.60   921.60    48.46     0.18    3.70   1.67   8.20
sdc      16.80   218.20   22.20   23.40   261.60   966.40    53.86     0.21    4.56   1.49   6.78

Dựa vào những điều trên có vẻ như một cái gì đó phải quá tải. Nhưng cái gì?

Câu hỏi

  1. Nếu nó không phải là ổ cứng hay CPU thì sao?
  2. Dường như 15,6% thời gian của CPU được dành để chờ đợi. Chính xác thì nó có thể chờ đợi điều gì?

2
thông số kỹ thuật cpu là gì và tải bao nhiêu?
sepehr

Tải hơn 100
dùng4951

tải liên quan đến số lõi của cpu và lõi cpu, thông số kỹ thuật của cpu trong hệ thống của bạn là gì?
sepehr

Câu trả lời:


49

Là một điểm làm rõ, tải không được gắn trực tiếp vào CPU. Đây là một trong những quan niệm sai lầm phổ biến nhất về tải. Thực tế là bạn đề cập đến đĩa dường như thừa nhận rằng bạn biết điều này, nhưng tôi chỉ muốn đề cập đến nó khi tôi thấy các bình luận cho thấy một số người khác tin.

Tải được định nghĩa là số lượng quá trình chờ trên tài nguyên hệ thống. Đây thường là CPU, đĩa hoặc mạng, nhưng có thể là bất cứ thứ gì phần cứng thực sự.
Một "quy trình" cũng không nhất thiết là một quá trình đầy đủ. Một luồng được định nghĩa là một "quy trình nhẹ" và mỗi luồng đang chờ sẽ tăng số lượng tải.


Để tìm ra quá trình nào là một vấn đề:

Chạy top -H( -Hcho phép hiển thị chủ đề)

Các phím tắt khác nhau tùy theo phiên bản.

Với đầu mới hơn (3,3 và sau):

Nhấn fđể hiển thị các tùy chọn trường.
Sử dụng các phím mũi tên để đi đến S = Process Statusvà nhấn s.
Nhấn qđể quay lại trang chính.
Nhấn Shift+ Rđể đảo ngược việc sắp xếp.

Với đầu cũ hơn (trước 3,3):

Nhấn Shift+ ođể hiển thị các tùy chọn sắp xếp.
Sau đó wđể sắp xếp theo trạng thái quá trình.
Sau đó Enterđể quay lại trang chính.
Sau đó Shift+ Rđể đảo ngược việc sắp xếp.

Sau đó, trong Scột, tìm kiếm các quy trình có Dhoặc R(bây giờ chúng phải ở trên cùng). Đây sẽ là các quá trình đóng góp vào tải hệ thống.

Nếu quá trình hiển thị D, điều đó có nghĩa là "giấc ngủ không bị gián đoạn". Thông thường, điều này được gây ra khi quá trình đang chờ trên I / O (đĩa, mạng, v.v.).
Nếu quá trình hiển thị a R, điều đó có nghĩa là nó chỉ thực hiện tính toán bình thường.


Để tìm hiểu thêm về những gì các quá trình đang làm:

Với đầu mới hơn (3,3 và sau):

Nhấn fđể hiển thị các tùy chọn trường.
Sử dụng các phím mũi tên để đi đến WCHAN = Sleeping in Functionvà nhấn dđể kích hoạt nó.
Sau đó qđể quay lại trang chính.

Với đầu cũ hơn (trước 3,3):

Nhấn fsau đó yđể kích hoạt WCHANtrường.

Nếu hệ thống của bạn có các tùy chọn kernel cần thiết và tệp wchan có trong hệ thống của bạn (tôi quên nó ở đâu và nó được gọi là gì) , WCHANtrường sẽ hiển thị cho bạn chức năng kernel nào mà quá trình hiện đang chạy (nếu trường chỉ hiển thị -hoặc ?trên tất cả mọi thứ, bạn không có hỗ trợ).
Một chút google ở ​​đây và bạn nên theo cách của bạn.

Nếu bạn không có hỗ trợ của wchan, bạn luôn có thể thử stracecác quy trình để tìm hiểu xem họ đang làm gì, nhưng đó là cách khó khăn.


Tôi thường chỉ cần nhấn mũi tên trái để thay đổi sắp xếp.
Nemo

2

Các quy trình có thời gian tồn tại ngắn như biên dịch các công việc hoặc các quy trình không thành công trong một vòng lặp thường không hiển thị trong các công cụ giám sát như tophoặc bộ điều chỉnh, v.v.

Trong những trường hợp như vậy, Khung kiểm toán Linux sẽ giúp

Thủ phạm, một vòng lặp thất bại chẳng hạn

while :; do gcc /dev/zero ; done >/dev/null 2>&1

Để sử dụng audd / audctl:

apt-get install auditd
auditctl -a task,always
ausearch -i -sc execve

đánh cắp từ nhật ký tất cả các quá trình khởi chạy


Nếu chúng không hiển thị top, thì có khả năng chúng không đóng góp vào tải trung bình. Để nó đóng góp vào tải trung bình, nó phải ở trong trạng thái chờ trong một khoảng thời gian dài. Theo thống kê, điều này có nghĩa là nó sẽ xuất hiện top. Nếu không, thì đó không phải là một đóng góp đáng kể.
Patrick

0

Tôi đã gặp tình huống khi các mount NFS bị ngắt kết nối và không may là tôi đã mắc lỗi và không sử dụng tùy chọn mount mềm, do đó, rất nhiều quy trình được đặt trên máy chủ Linux của tôi, bao gồm cả các phiên giám sát, lsof và thậm chí là bash ....

Sau khi ngắt kết nối các khung bị hỏng, hệ thống trông có vẻ quá tải:

top - 00:03:48 up 15 days, 14:56,  3 users,  load average: 29, 21, 20

Điều này có vẻ khủng khiếp, nhưng việc sử dụng CPU dưới 15% và không có I / O đĩa. Tôi đã nhận được một số lời khuyên để vượt qua ps, nhưng điều này không giúp được gì vì có vẻ như các quá trình chủ yếu là ngủ.

Sau đó, man pstôi đã dành cả đêm để ngủ và sau khi điều tra, tôi đã tìm thấy những lá cờ TÌNH TRẠNG rất quan trọng để xem xét, vì sau đó xác định chúng bị kẹt trong quá trình.

Thi hành:

ps -e v

và tìm kiếm các quy trình có Dhoặc SLtrong cột STAT. Chúng giống như các quá trình zombie nhưng không được xác định là Z -zombie.

D - có nghĩa là hoạt động chủ yếu là đĩa (I / O), nhưng nếu bạn chạy ps -e vvài lần và cũng iostat 3không thấy hoạt động nào, điều này cho thấy rằng điều này bị kẹt i / o .

SL - điều này có nghĩa là đã khóa Paged trong bộ nhớ của quá trình đó, do đó nếu bạn có thể xác định rằng quy trình này không nên hoạt động như thế này, thì đó là ứng cử viên có thể tiếp theo nếu nó tồn tại trong một thời gian dài hơn mà không thay đổi.

Sau khi điều tra, tôi đã giết từng người một và hệ thống tải trung bình của tôi trở nên bình thường.

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.