Hiểu về load average trong Linux
Load average và vai trò của nó trong quá trình troubleshooting Linux performance issue
* This file contains the magic bits required to compute the global loadavg
* figure. Its a silly number but people think its important. We go through
* great pains to make it work on big machines and tickless kernels.
Quote phía trên được trích từ file loadavg.c trong source code của Linux kernel. Tác giả muốn nói rằng load average là một con số ngớ ngẩn (silly), nhưng rất nhiều người lại nghĩ là nó quan trọng.
Vậy load average là gì? Và tại sao trong source code của Linux lại cho rằng nó không thực sự quan trọng như mọi người vẫn nghĩ?
Load Average là gì?
Thông thường, khi hệ thống gặp vấn đề, việc đầu tiên cần làm là đi kiểm tra xem có bị thiếu resources hay không. Và cách dễ nhất để biết điều đó là kiểm tra load average.
Nào hãy cùng mở terminal và chạy câu lệnh bên dưới:
$ uptime
08:31:10 up 60 days, 18:16, 1 user, load average: 16.55, 8.11, 4.28
Giải thích phần output một chút:
08:31:10: giờ hiện tại lúc chạy câu lệnh
up 60 days 18:16: thời gian hệ thống đã chạy (60 ngày 18 tiếng 16 phút)
1 user: hiện tại đang có 1 người dùng login vào
load average: 16.55, 8.11, 4.28 - thể hiện load average trung bình trong 1 phút, 5 phút, và 15 phút gần nhất.
Sau khi kiểm tra tôi thấy load average trong 1 phút gần nhất có vẻ cao, nên đã kết luận hệ thống bị chậm là do thiếu CPU. Tuy nhiên có vẻ mọi thứ không giống như tôi nghĩ.
Tại sao Load Average lại không quan trọng như nhiều người vẫn nghĩ?
Trong Linux, khi nói đến load average, ta phải hiểu đó là system load average, chứ không phải CPU load average.
Rất nhiều người khi đề cập đến load average, họ sẽ nghĩ ngay đến thông số của CPU. Tuy nhiên điều này không chính xác.
Trong những phiên bản kernel Linux đầu tiên, load average đúng là CPU load average thật. Tuy nhiên, vào năm 1993, sau một bản patch ở version 0.99.14, load average đã được thay đổi cách tính để trở nên tổng quát hơn. Lúc này, nó không chỉ là thông số về CPU nữa, mà còn phản ánh thực trạng của các resource khác như disk I/O, locks.
Do đó, việc tôi ngay lập tức kết luận load cao là do thiếu CPU là một kết luận chưa đủ căn cứ, và thực tế cũng đã chứng minh như vậy.
Vậy có thể kết luận gì khi nhìn vào load average?
Nếu chỉ nhìn vào load average, ta chỉ có thể trả lời được cho hai câu hỏi:
Câu hỏi 1: Có phải hệ thống đang thiếu resources hay không?
Để trả lời được câu hỏi này, ta so sánh load average của hệ thống lúc có vấn đề với lúc hệ thống chạy bình thường. Nếu nó cao hơn, có nghĩa là hệ thống đang quá tải.
Câu hỏi 2: Hệ thống có vấn đề từ khi nào?
Để trả lời câu hỏi này, ta cần nhìn vào cả 3 thông số 1m, 5m, và 15m.
Nếu 1m load average lớn hơn 5m và 15m load average, khả năng là vấn đề đang xảy ra.
Nếu 1m load average thấp hơn 5m và 15m load average, khả năng là thời điểm xảy ra vấn đề đã trôi qua.
Tổng kết
Brendan Gregg - tác giả của nhiều cuốn sách nổi tiếng về monitoring hệ thống - có nói rằng: “Don't spend more than 5 seconds for load average”. Dịch ra là “Không dành quá 5 giây cho load average”. Load average nên chỉ dừng lại ở mức entrypoint cho quá trình troubleshooting mà thôi.
Vậy sau khi giành ra 5 giây để kiểm tra load average, chúng ta cần làm gì tiếp theo? Xin phép được hẹn bạn đọc trong một bài viết khác.
Tham khảo
Phần lớn bài viết được tham khảo ở Linux Load Averages: Solving the Mystery
Tool tôi vẽ comic dùng Canva Comic Strip