iostat Command in Linux

Introduction to Linux iostat Command

This tutorial explores the Linux iostat command, a vital tool for system administrators to monitor system input/output (I/O) performance. Learn to track CPU utilization and disk I/O statistics effectively. We'll begin with the purpose and basic usage of iostat, covering the installation of the necessary sysstat package and running the command to display CPU and I/O metrics. Then, we'll delve into analyzing CPU and I/O data, and monitoring disk I/O performance in detail.

Understanding iostat Command: Purpose and Usage

This section introduces the purpose and fundamental usage of the iostat command within a Linux environment. iostat provides critical insight into system I/O performance, allowing systemadmin to identify bottlenecks and optimize resource allocation. The primary function is to provide real-time and historical data about both CPU utilization and disk I/O operations.

First, ensure the sysstat package, which bundles the iostat command, is installed:

sudo apt-get update
sudo apt-get install -y sysstat

Now, execute the basic iostat command to view initial CPU and I/O statistics:

iostat

Example output:

Linux 5.15.0-52-generic (labex-ubuntu)   07/11/2023      _x86_64_        (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.50    0.00     0.25     0.00     0.00    99.25

Device             tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              0.17         1.67         1.67       1024       1024

The output presents key metrics including average CPU utilization and various disk I/O parameters. These include transactions per second (tps), read and write throughput (kB_read/s and kB_wrtn/s), and the total amount of data read and written (kB_read and kB_wrtn).

The iostat command can also target specific devices or show more granular data. For example, monitoring the sda device every 2 seconds, repeated 10 times:

iostat -d sda 2 10

This provides a focused, time-series view of the I/O performance of the sda device.

Analyzing CPU and I/O Statistics with iostat

This section focuses on interpreting the CPU and I/O statistics presented by the iostat command. Proper analysis allows you to pinpoint performance bottlenecks.

Start with a general overview by running iostat without specific options:

iostat

Example output:

Linux 5.15.0-52-generic (labex-ubuntu)   07/11/2023      _x86_64_        (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.50    0.00     0.25     0.00     0.00    99.25

Device             tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              0.17         1.67         1.67       1024       1024

The output displays CPU utilization and disk I/O metrics. Let's break down these metrics for clarity:

  • avg-cpu: This section details the average CPU usage, breaking it down into the percentage of time spent in user mode (%user), nice mode (%nice), system mode (%system), I/O wait (%iowait), and idle time (%idle). High %iowait values can indicate disk I/O bottlenecks.
  • Device: This section presents I/O statistics for each block device, including transactions per second (tps), read and write throughput (kB_read/s and kB_wrtn/s), and total read and write data (kB_read and kB_wrtn).

To examine CPU utilization on a per-core basis, use the -c option. This is helpful for understanding CPU load distribution.

iostat -c

Example output:

Linux 5.15.0-52-generic (labex-ubuntu)   07/11/2023      _x86_64_        (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.50    0.00     0.25     0.00     0.00    99.25
           0.50    0.00     0.25     0.00     0.00    99.25

This shows a breakdown of CPU utilization for each CPU core, helping identify potential imbalances.

Focusing on a specific device's I/O statistics is done with the -d option, followed by the device name. For instance, to monitor sda:

iostat -d sda

Example output:

Linux 5.15.0-52-generic (labex-ubuntu)   07/11/2023      _x86_64_        (2 CPU)

Device             tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              0.17         1.67         1.67       1024       1024

This gives a detailed picture of the I/O performance of the sda device.

Monitoring Disk I/O Performance Using iostat in Linux

This section teaches how to utilize iostat for detailed monitoring of disk I/O performance. Knowing the disk I/O characteristics is key for optimizing application performance and system responsiveness.

Enhance the output with the -x option to display extended disk I/O statistics. This provides a more comprehensive view of disk activity.

iostat -x

Example output:

Linux 5.15.0-52-generic (labex-ubuntu)   07/11/2023      _x86_64_        (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.50    0.00     0.25     0.00     0.00    99.25

Device            r/s     w/s     rkB/s     wkB/s   await  r_await w_await  svctm  %util
sda              0.17    0.17       1.67      1.67    5.00     5.00     5.00   2.00   0.03

The -x option adds these crucial metrics:

  • r/s: Reads per second - the number of read requests issued to the device per second.
  • w/s: Writes per second - the number of write requests issued to the device per second.
  • rkB/s: Read throughput in kB/s - the amount of data read from the device per second, in kilobytes.
  • wkB/s: Write throughput in kB/s - the amount of data written to the device per second, in kilobytes.
  • await: Average time for I/O requests (in milliseconds) - the average time (in milliseconds) that I/O requests spend waiting and being serviced.
  • r_await: Average time for read requests (in milliseconds) - the average time for read requests to complete.
  • w_await: Average time for write requests (in milliseconds) - the average time for write requests to complete.
  • svctm: Average service time (in milliseconds) - the average time spent servicing each I/O request.
  • %util: Percentage of CPU time during which I/O requests were issued (CPU utilization for I/O) - the percentage of time the device is busy servicing I/O requests. High values indicate the disk is heavily utilized.

These metrics help identify disk I/O bottlenecks. Elevated await, r_await, or w_await values, especially coupled with high %util, signal performance issues.

To observe disk I/O performance trends, use the iostat command with -x and specify a delay and count. This allows for time-series analysis.

iostat -x 2 5

This displays the disk I/O statistics every 2 seconds, for a total of 5 iterations, allowing observation of performance changes over time. This is crucial for detecting transient issues.

Summary of iostat Usage

This tutorial covered the use of the iostat command in Linux, a key tool for system monitoring. We learned the purpose of iostat in monitoring system input/output (I/O) performance, including CPU utilization and disk I/O statistics. We installed the sysstat package and ran the iostat command to view basic CPU and I/O statistics, as well as detailed statistics for specific devices. The tutorial also covered analyzing the statistics, understanding metrics like transactions per second, read/write throughput, and data volumes. Armed with this knowledge, any systemadmin can quickly diagnose I/O related performance problems.

400+ Linux Commands