There is a performance problem in the Linux system. Generally, we can use commands such as top, iostat, free, and vmstat to check the initial positioning problem. Among them, iostat can provide us with rich IO status data.
1. Basic use
iostat -d -k 1 10
The parameter -d indicates that the device (disk) usage status is displayed; -k some columns that use block as the unit are forced to use Kilobytes as the unit; 1 10 indicates that the data display is refreshed every 1 second, a total of 10 times.
iostat -d -k 1 10 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 39.29 21.14 1.44 441339807 2990031 sda1 0.00 0.00 0.00 1623 523 sda2 1.32 1.43 4.54 29834273 94827104 sda3 6.30 0.85 24.95 17816289 520725244 sda5 0.85 0.46 3.40 9543503 70970116 0.000.0036 0.00da 0.00s 0 _ _ _ _ _ _ _ _ sda8 0.00 0.00 0.00 406 0 sda9 0.00 0.00 0.00 406 0 sda10 60.68 18.35 71.43 383002263 1490928140 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 327.55 5159.18 102.04 5056 100 sda1 0.00 0.00 0.00 0 0
tps : Indicate the number of transfers per second that were issued to the device. "One transfer" means "one I/O request". Multiple logical requests may be combined into "one I/O request". The size of the "one transfer" request is unknown.
kB_read/s : The amount of data read from the device (drive expressed) per second; kB_wrtn/s : The amount of data written to the device (drive expressed) per second; kB_read: The total amount of data read; kB_wrtn : The written The total amount of data; these units are Kilobytes.
In the above example, we can see the statistics of the disk sda and its various partitions. The total TPS of the disk at that time was 39.29, and the following is the TPS of each partition. (Because it is an instantaneous value, the total TPS is not strictly equal to the sum of the TPS of each partition)
2. -x parameter
With the -x parameter we can get more statistics.
iostat -d -x -k 1 10 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util sda 1.56 28.31 7.80 31.49 42.51 2.92 21.26 1.46 1.16 0.03 0.79 2.62 10.28 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util sda 2.00 20.00 381.00 7.00 12320.00 216.00 6160.00 108.00 32.31 1.75 4.50 2.17 84.20
rrqm/s : How many read requests related to this device are merged per second (when the system call needs to read data, VFS sends the request to each FS, if the FS finds that different read requests read the same Block data, FS will merge this request with Merge); wrqm/s: How many write requests related to this device are merged per second.
rsec/s : Sectors read per second; wsec/ : Sectors written per second. r/s : The number of read requests that were issued to the device per second; w/s : The number of write requests that were issued to the device per second;
await : The average processing time (in milliseconds) of each IO request. This can be understood as the IO response time. Generally, the system IO response time should be less than 5ms, and if it is greater than 10ms, it will be relatively large.
%util : All processing IO time during the statistical time, divided by the total statistical time. For example, if the statistics interval is 1 second, the device is processing IO for 0.8 seconds and idle for 0.2 seconds, then the device's %util = 0.8/1 = 80%, so this parameter implies how busy the device is. In general, if this parameter is 100%, it means that the device is running at full capacity (of course, if it is multi-disk, even if %util is 100%, because of the concurrency capability of the disk, the disk usage may not be the bottleneck).
3. -c parameter
iostat can also be used to get some cpu status values:
iostat -c 1 10 avg-cpu: %user %nice %sys %iowait %idle 1.98 0.00 0.35 11.45 86.22 avg-cpu: %user %nice %sys %iowait %idle 1.62 0.00 0.25 34.46 63.67
4. Common usage
iostat -d -k 1 10 #View TPS and throughput information iostat -d -x -k 1 10 #View device usage (% util), response time (await) iostat -c 1 10 #View cpu status
5. Case Analysis
iostat -d -k 1 |grep sda10 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn SDA10 60.72 18.95 71.53 395637647 1493241908 SDA10 299.02 4266.67 129.41 4352 132 SDA10 483.84 4589.90 4117.17 4544 4076 SDA10 218.00 3360.00 100.00 3360 100 SDA10 546.00 8784.00 124.00 8784 124 SDA10 827.00 13232.00 136.00 13232 136
As seen above, the average number of disk transfers per second is about 400; disk reads are about 5MB per second and writes are about 1MB.
iostat -d -x -k 1 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util sda 1.56 28.31 7.84 31.50 43.65 3.16 21.82 1.58 1.19 0.03 0.80 2.61 10.29 sda 1.98 24.75 419.80 6.93 13465.35 253.47 6732.67 126.73 32.15 2.00 4.70 2.00 85.25 sda 3.06 41.84 444.90 54.08 102 . _ _ _ _ _ _ _
It can be seen that the average response time of the disk is <5ms, and the disk usage is >80. The disk is responding normally, but is already busy.