iostat command in linux

Khám phá sức mạnh giám sát hiệu suất I/O với lệnh iostat trong Linux

Bạn có bao giờ tự hỏi ổ cứng của mình đang hoạt động như thế nào? Liệu hệ thống có đang bị nghẽn cổ chai do I/O (Input/Output) hay không? Trong thế giới Linux, lệnh iostat chính là công cụ đắc lực giúp bạn vén màn bí mật này. Bài viết này sẽ đưa bạn đi sâu vào thế giới của iostat, từ cơ bản đến nâng cao, giúp bạn làm chủ khả năng giám sát và tối ưu hóa hiệu suất I/O trên hệ thống Linux của mình.

iostat là gì và tại sao nó quan trọng?

iostat (Input/Output Statistics) là một tiện ích dòng lệnh trong Linux, được tích hợp trong gói sysstat. Chức năng chính của nó là thu thập và hiển thị các thống kê về hoạt động I/O của hệ thống, bao gồm các thiết bị lưu trữ (ổ cứng, SSD), phân vùng và thậm chí cả CPU liên quan đến I/O. Nhờ iostat, bạn có thể:

  • Xác định nút thắt cổ chai I/O: Phát hiện thiết bị nào đang hoạt động quá tải và gây chậm trễ cho hệ thống.
  • Theo dõi hiệu suất: Quan sát xu hướng hoạt động I/O theo thời gian để đánh giá hiệu quả của các thay đổi cấu hình.
  • Lập kế hoạch tài nguyên: Dự đoán nhu cầu I/O trong tương lai để đảm bảo hệ thống có đủ tài nguyên.
  • Gỡ rối hiệu suất: Tìm ra nguyên nhân gây ra các vấn đề về hiệu suất liên quan đến I/O.

Nói tóm lại, iostat là một công cụ không thể thiếu cho bất kỳ quản trị viên hệ thống hoặc người dùng Linux nào muốn hiểu rõ và tối ưu hóa hiệu suất hệ thống của mình.

Cài đặt iostat

Như đã đề cập, iostat là một phần của gói sysstat. Trên hầu hết các дистрибутив Linux, bạn có thể cài đặt nó bằng trình quản lý gói của mình. Dưới đây là ví dụ cho một số дистрибутив phổ biến:

  • Debian/Ubuntu: sudo apt-get install sysstat
  • CentOS/RHEL/Fedora: sudo yum install sysstat hoặc sudo dnf install sysstat
  • openSUSE: sudo zypper install sysstat

Sau khi cài đặt, bạn có thể cần khởi động hoặc kích hoạt dịch vụ sysstat để iostat hoạt động đúng cách. Hãy kiểm tra tài liệu của дистрибутив bạn đang sử dụng để biết thêm chi tiết.

Sử dụng iostat cơ bản

Cú pháp cơ bản của lệnh iostat như sau:

iostat [options] [device(s)] [interval] [count]

Trong đó:

  • options: Các tùy chọn điều khiển cách iostat hiển thị thông tin.
  • device(s): Tên của thiết bị bạn muốn theo dõi (ví dụ: sda, sdb, nvme0n1). Nếu bỏ qua, iostat sẽ hiển thị thông tin cho tất cả các thiết bị.
  • interval: Khoảng thời gian (tính bằng giây) giữa các lần thống kê.
  • count: Số lần thống kê được hiển thị. Nếu bỏ qua, iostat sẽ tiếp tục chạy cho đến khi bạn dừng nó bằng Ctrl+C.

Ví dụ đơn giản nhất để chạy iostat là:

iostat

Lệnh này sẽ hiển thị thông tin về tất cả các thiết bị, chỉ một lần duy nhất.

Để theo dõi hiệu suất của ổ cứng sda mỗi 5 giây, bạn có thể sử dụng:

iostat sda 5

Lệnh này sẽ hiển thị thông tin về sda mỗi 5 giây cho đến khi bạn dừng nó.

Giải thích các cột thông tin quan trọng

iostat hiển thị rất nhiều thông tin, nhưng một số cột đặc biệt quan trọng để bạn hiểu được tình trạng I/O của hệ thống. Dưới đây là một số cột quan trọng nhất:

  • Device: Tên của thiết bị.
  • tps: Số lượng giao dịch I/O (transfer per second) được thực hiện trên thiết bị mỗi giây.
  • kB_read/s: Lượng dữ liệu đọc từ thiết bị (tính bằng kilobytes) mỗi giây.
  • kB_wrtn/s: Lượng dữ liệu ghi vào thiết bị (tính bằng kilobytes) mỗi giây.
  • kB_dscd/s: Lượng dữ liệu bị loại bỏ (discarded) từ thiết bị (tính bằng kilobytes) mỗi giây (thường thấy trên SSD).
  • kB_read: Tổng lượng dữ liệu đã đọc từ thiết bị (tính bằng kilobytes).
  • kB_wrtn: Tổng lượng dữ liệu đã ghi vào thiết bị (tính bằng kilobytes).
  • kB_dscd: Tổng lượng dữ liệu đã loại bỏ từ thiết bị (tính bằng kilobytes).
  • rrqm/s: Số lượng yêu cầu đọc được hợp nhất (merged) mỗi giây. Giá trị cao có thể cho thấy hệ thống đang xử lý nhiều yêu cầu đọc nhỏ liên tiếp.
  • wrqm/s: Số lượng yêu cầu ghi được hợp nhất (merged) mỗi giây. Tương tự như rrqm/s, giá trị cao có thể cho thấy hệ thống đang xử lý nhiều yêu cầu ghi nhỏ liên tiếp.
  • r/s: Số lượng yêu cầu đọc được thực hiện mỗi giây.
  • w/s: Số lượng yêu cầu ghi được thực hiện mỗi giây.
  • rsec/s: Số lượng sector (512 byte) đọc được mỗi giây.
  • wsec/s: Số lượng sector (512 byte) ghi được mỗi giây.
  • await: Thời gian trung bình (tính bằng milliseconds) để một yêu cầu I/O hoàn thành, bao gồm cả thời gian chờ đợi trong hàng đợi. Giá trị cao có thể cho thấy hệ thống đang bị nghẽn cổ chai I/O.
  • r_await: Thời gian trung bình (tính bằng milliseconds) để một yêu cầu đọc hoàn thành.
  • w_await: Thời gian trung bình (tính bằng milliseconds) để một yêu cầu ghi hoàn thành.
  • svctm: Thời gian trung bình (tính bằng milliseconds) để một yêu cầu I/O được xử lý bởi thiết bị. Giá trị này thường thấp hơn await.
  • %util: Tỷ lệ phần trăm thời gian mà thiết bị bận rộn xử lý yêu cầu I/O. Giá trị gần 100% có thể cho thấy thiết bị đang bị quá tải.

Bạn nên tập trung vào các cột %util, await, kB_read/skB_wrtn/s để đánh giá hiệu suất I/O tổng thể.

Các tùy chọn hữu ích của iostat

iostat cung cấp nhiều tùy chọn để tùy chỉnh đầu ra và thu thập thông tin chi tiết hơn. Dưới đây là một số tùy chọn hữu ích:

  • -c: Hiển thị thống kê CPU liên quan đến I/O.
  • -d: Hiển thị thống kê thiết bị (mặc định).
  • -k: Hiển thị thông tin theo kilobytes (mặc định). Sử dụng -m để hiển thị theo megabytes.
  • -p [device|ALL]: Hiển thị thống kê cho từng phân vùng của thiết bị. Sử dụng ALL để hiển thị cho tất cả các phân vùng.
  • -t: Thêm dấu thời gian vào mỗi dòng thống kê.
  • -x: Hiển thị thông tin chi tiết hơn, bao gồm các cột rrqm/s, wrqm/s, r_await, w_awaitsvctm.
  • -y: Bỏ qua dòng thống kê đầu tiên (thường chứa thông tin trung bình kể từ khi hệ thống khởi động). Điều này hữu ích khi bạn chỉ muốn theo dõi hiệu suất trong một khoảng thời gian cụ thể.

Ví dụ, để hiển thị thông tin chi tiết cho tất cả các phân vùng của ổ cứng sda, bao gồm dấu thời gian, bạn có thể sử dụng:

iostat -x -p ALL -t sda 5

Ví dụ thực tế và phân tích

Hãy xem xét một vài ví dụ thực tế về cách sử dụng iostat để chẩn đoán các vấn đề về hiệu suất I/O:

  • Ví dụ 1: Ổ cứng bị quá tải
    Nếu bạn thấy %util gần 100% và await cao (ví dụ: trên 20ms), điều này có thể cho thấy ổ cứng đang bị quá tải. Bạn nên kiểm tra xem có quá nhiều tiến trình đang truy cập ổ cứng cùng một lúc hay không. Có thể cần nâng cấp lên ổ cứng nhanh hơn hoặc di chuyển một số dữ liệu sang ổ cứng khác.
  • Ví dụ 2: Nhiều yêu cầu I/O nhỏ
    Nếu bạn thấy rrqm/swrqm/s cao, điều này có thể cho thấy hệ thống đang xử lý nhiều yêu cầu I/O nhỏ liên tiếp. Điều này có thể xảy ra khi bạn có nhiều tiến trình đang đọc và ghi dữ liệu vào các tệp nhỏ. Bạn có thể cải thiện hiệu suất bằng cách tối ưu hóa cách các tiến trình này truy cập dữ liệu (ví dụ: sử dụng bộ đệm lớn hơn hoặc ghi dữ liệu theo lô).
  • Ví dụ 3: Ứng dụng cụ thể gây ra tải I/O cao
    Bạn có thể sử dụng các công cụ khác như iotop hoặc pidstat (cũng thuộc gói sysstat) để xác định tiến trình nào đang gây ra tải I/O cao. Sau khi xác định được tiến trình, bạn có thể phân tích nó để tìm ra nguyên nhân và tối ưu hóa nó.

So sánh iostat với các công cụ khác

iostat không phải là công cụ duy nhất để giám sát hiệu suất I/O trong Linux. Dưới đây là so sánh nhanh với một số công cụ phổ biến khác:

Công cụ Ưu điểm Nhược điểm Ứng dụng
iostat Dễ sử dụng, cung cấp thông tin tổng quan về hiệu suất I/O của hệ thống. Không hiển thị thông tin chi tiết về từng tiến trình. Giám sát hiệu suất I/O tổng thể, xác định nút thắt cổ chai.
iotop Hiển thị danh sách các tiến trình đang sử dụng I/O nhiều nhất. Có thể gây ra tải hệ thống cao khi chạy trên các hệ thống bận rộn. Xác định tiến trình gây ra tải I/O cao.
vmstat Hiển thị thông tin về bộ nhớ ảo, CPU và I/O. Thông tin I/O ít chi tiết hơn so với iostat. Giám sát hiệu suất hệ thống tổng thể, bao gồm cả I/O.
dstat Kết hợp thông tin từ nhiều công cụ (iostat, vmstat, netstat). Có thể phức tạp để cấu hình và sử dụng. Giám sát hiệu suất hệ thống toàn diện.

Tùy thuộc vào nhu cầu của bạn, bạn có thể chọn công cụ phù hợp nhất. Trong nhiều trường hợp, bạn có thể sử dụng kết hợp các công cụ để có được bức tranh đầy đủ về hiệu suất hệ thống.

Câu hỏi thường gặp (FAQ)

Làm thế nào để hiểu giá trị %util trong iostat?

Giá trị %util cho biết tỷ lệ phần trăm thời gian mà thiết bị lưu trữ bận rộn xử lý các yêu cầu I/O. Giá trị gần 100% cho thấy thiết bị có thể đang bị quá tải, trong khi giá trị thấp cho thấy thiết bị đang hoạt động dưới công suất tối đa.

Tôi nên làm gì nếu thấy await quá cao trong iostat?

Giá trị await cao cho thấy các yêu cầu I/O đang mất nhiều thời gian để hoàn thành. Điều này có thể do nhiều nguyên nhân, bao gồm ổ cứng bị quá tải, hàng đợi I/O quá dài, hoặc các vấn đề về phần cứng. Bạn nên kiểm tra các yếu tố này để xác định nguyên nhân và thực hiện các biện pháp khắc phục.

Làm thế nào để theo dõi hiệu suất I/O theo thời gian dài?

Bạn có thể sử dụng iostat kết hợp với các công cụ khác như sar (System Activity Reporter) để thu thập và lưu trữ dữ liệu hiệu suất theo thời gian. Sau đó, bạn có thể sử dụng các công cụ phân tích để xem xét xu hướng và xác định các vấn đề tiềm ẩn.

Kết luận

iostat là một công cụ mạnh mẽ và linh hoạt để giám sát hiệu suất I/O trong Linux. Bằng cách hiểu cách sử dụng iostat và phân tích các thống kê mà nó cung cấp, bạn có thể xác định các nút thắt cổ chai I/O, tối ưu hóa hiệu suất hệ thống và đảm bảo rằng hệ thống của bạn hoạt động trơn tru và hiệu quả. Hãy thử nghiệm với các tùy chọn khác nhau của iostat và tìm hiểu cách nó có thể giúp bạn quản lý hệ thống Linux của mình tốt hơn.

Last Updated : 21/08/2025