Tải trung bình (load average) thường được biểu thị dưới dạng ba con số, ví dụ như 0.50, 1.00, 2.00. Các con số này thể hiện trung bình số lượng tiến trình đang chờ để được xử lý hoặc đang chạy trong các khoảng thời gian trước đó (thường là 1 phút, 5 phút và 15 phút).
- 0.50: Đây là tải trung bình trong 1 phút. Nếu con số này thấp, tức là hệ thống đang không bị quá tải và có sẵn tài nguyên để xử lý thêm các tiến trình.
- 1.00: Đây là tải trung bình trong 5 phút. Nếu con số này ổn định và không quá cao, hệ thống vẫn hoạt động một cách hiệu quả. Nếu con số này tiếp tục tăng lên, có thể hệ thống đang bắt đầu gặp vấn đề về tải.
- 2.00: Đây là tải trung bình trong 15 phút. Nếu con số này cao hơn so với khả năng của hệ thống, hệ thống có thể đang bị quá tải và các tiến trình có thể bắt đầu chậm hoặc bị gián đoạn.
Vì hệ thống chỉ có một CPU, các con số tải trung bình càng lớn thì khả năng xử lý của hệ thống cũng càng giảm. Khi con số tải trung bình vượt quá 1.00, đặc biệt là 2.00, hệ thống có thể gặp vấn đề và cần phải xem xét tăng cường tài nguyên hoặc tối ưu hóa để duy trì hiệu suất ổn định.
3. Ví dụ thực tế
Giả sử bạn đang đứng trên bờ sông và nhìn thấy một cây cầu bắt qua sông. Cầu chỉ có một làn đường duy nhất và có thể chứa tối đa 10 chiếc xe cùng lúc.
- Khi Loadavg của cây cầu là 0.00: Điều này có nghĩa là cây cầu đang hoàn toàn trống rỗng, không có chiếc xe nào đi qua cả. Bạn có thể dễ dàng bước sang bên kia mà không gặp phải phương tiện nào.
- Khi Loadavg của cây cầu là 1.00: Điều này cho thấy cây cầu đang hoạt động ở mức 100% sức chứa của nó. Một làn xe đang đi qua cây cầu, trong khi đó có một làn xe khác đã sẵn sàng đợi để bắt đầu hành trình mới.
- Khi Loadavg vượt qua 1.00, ví dụ như 2.00: Điều này cho thấy rằng đang có một làn xe đang đi trên cây cầu và một làn xe khác đang chờ đợi để vào cây cầu. Hiện tượng này chỉ ra rằng sức chứa của cây cầu không đủ để đáp ứng nhu cầu giao thông hiện tại và có sự chồng chéo giữa xe đang đi và xe đang chờ đợi.
Trong Linux, loadavg tương tự như số tiến trình (process) đang sử dụng CPU và số tiến trình đã được xếp hàng chờ đợi sử dụng CPU. Giống như ví dụ về cây cầu, loadavg nên được duy trì dưới mức 1.00 để đảm bảo hệ thống hoạt động trơn tru. Tuy nhiên, nó có thể vượt quá 1.00 trong một vài khoảng thời gian. Nếu loadavg vượt quá 1.00 quá lâu, đây là dấu hiệu bạn nên bắt đầu quan tâm và xem xét tối ưu hóa hệ thống.
Vấn đề loadavg 1.00
Nếu hệ thống của chúng ta chỉ có 1 CPU và loadavg đạt 1.00, điều đó chỉ ra rằng CPU đã được sử dụng hết công suất. Thông thường, chúng ta sẽ bắt đầu kiểm tra hệ thống nếu loadavg vượt quá 0.70.
- “Cần kiểm tra”: Nếu loadavg > 0.70, chúng ta cần kiểm tra và tìm hiểu nguyên nhân trước khi tình trạng tăng lên quá cao.
- “Khắc phục ngay bây giờ”: Nếu loadavg > 1.00, đây là dấu hiệu cần khắc phục ngay lập tức để tránh tình trạng tải hệ thống quá tải.
- “Đang gặp vấn đề nghiêm trọng”: Nếu loadavg > 5.00, hệ thống đang gặp vấn đề nghiêm trọng và đang hoạt động rất chậm. Chúng ta cần khắc phục ngay và tìm nguyên nhân gây ra trạng thái này.
Loadavg trên hệ thống nhiều CPU
Nếu hệ thống của chúng ta sử dụng CPU Quad-Core và loadavg vẫn ở mức 3.00, điều này có nghĩa là:
Trên hệ thống có nhiều CPU Cores, loadavg phản ánh mức độ sử dụng của toàn bộ CPU Cores có sẵn trên hệ thống. Ví dụ, “dùng hết 100%” tương đương với loadavg là 1.00 trên hệ thống có 1 CPU core, 2.00 trên hệ thống Dual-Core, 4.00 trên hệ thống Quad-Core, và cứ tiếp tục như vậy.
Tương tự như ví dụ về cái cầu ở trên, nếu chúng ta xây một cái cầu có 2 làn xe, thì khi loadavg của cầu đạt 1.00 thì chỉ có nghĩa là cầu đang sử dụng 50% sức chứa của nó.
Loadavg trên Linux bao gồm những gì?
Loadavg trên Linux là “system load averages”, tức là chỉ số cho toàn bộ hệ thống, nó đo đạc những tác vụ đang chạy và những tác vụ đang chờ để chạy (bao gồm CPU, ổ đĩa và các khóa không thể bị ngắt). Nói cách khác, loadavg bao gồm những tác vụ không ở trạng thái nghỉ hoàn toàn (idle).
Loadavg nào là lý tưởng?
Loadavg trên Linux là một chỉ số mơ hồ, bao gồm nhiều nhóm tài nguyên khác nhau như CPU, ổ đĩa và khóa không thể bị ngắt. Việc chia tỷ lệ loadavg với số lượng CPU Cores để xác định hiệu suất hệ thống cũng không phải là một quy tắc cứng và nhanh. Loadavg chỉ là mức trung bình dài hạn (ít nhất một phút), có thể giấu đi sự thay đổi nhanh chóng trong hiệu suất. Ví dụ, một hệ thống có tỉ lệ 1.5 loadavg có thể hoạt động tốt trong khi một hệ thống khác ở cùng mức loadavg lại có thể gặp vấn đề với hiệu suất. Do đó, để xác định vấn đề, chúng ta cần kiểm tra các số liệu (metric) khác trên hệ thống, không chỉ dựa vào loadavg một cách đơn giản.
Những số liệu(metric) tốt hơn
Khi loadavg trên hệ thống Linux tăng, điều này chỉ ra rằng hệ thống đang sử dụng tài nguyên nhiều hơn, bao gồm CPU, đĩa và khóa không thể bị ngắt. Tuy nhiên, loadavg không cho biết chính xác là tài nguyên nào đang bị chiếm giữ nhiều nhất. Để làm rõ hơn về từng nhóm tài nguyên, chúng ta có thể sử dụng các lệnh sau:
– Để xác định sử dụng CPU trên từng core: `mpstat -P ALL 1`.
– Để xác định sử dụng CPU của từng tiến trình: `top` hoặc `pidstat`.
– Để đo lường độ trễ trong hàng đợi chạy CPU: `perf sched`.
Tuy nhiên, mặc dù loadavg cung cấp một cái nhìn tổng quan về tình trạng của hệ thống, nó không hẳn là một chỉ số hữu ích khi nói đến hiệu suất hệ thống. Loadavg thường được sử dụng trong việc tự động mở rộng hệ thống trên các nền tảng đám mây dựa trên cơ sở của nó. Các nhà phát triển chính của nhân Linux cũng đã lưu ý về điều này trong tệp loadavg.c trong mã nguồn nhân Linux.