0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在Linux使用iostat命令

CHANBAEK 来源:myfreax 作者:myfreax 2023-01-04 17:17 次阅读

IO等待或者iowaitwaitwa%iowait,或者wait%通常可以通过Linux系统监控工具查看。例如命令行工具top、sar、atop等。

就其本身而言,它是众多性能统计数据之一,可让我们深入了解Linux系统性能。当CPU负载峰值为60到80时。I/O等待会导致页面加载缓慢、超时和间歇性中断。

IO等待是CPU或多个CPU空闲的时间百分比,在此期间系统有等待的磁盘I/O请求,I/O等待适用于Unix/Linux系统,包括macOS、FreeBSD、Solaris。

iostat 命令查找高IO等待的磁盘

Linux有很多可用的工具可以用来发现与排错,有些工具很容易使用,有些用法则比较高级。

查看I/O 等待问题不仅需要使用一些高级工具,也需要一些基本工具的高级用法。I/O等待之所以难以排查是因为默认有太多的工具告诉你系统I/O阻塞。

但没那么多工具可以帮你缩小范围以确定是哪个或哪些进程引起的问题。

在排查IO等待问题上,首先确定是不是因为I/O引起系统缓慢。你可以使用很多工具但最简单的Linux命令还是top。

使用top命令即可看到类似这样的信息Cpu(s): 0.0%us, 0.5%sy, 0.0%ni, 99.5%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st

us用户空间占用CPU百分比。sy内核空间占用CPU百分比。ni用户进程空间内改变过优先级的进程占用CPU百分比。

id空闲CPU百分比。wa等待输入输出的CPU时间百分比。hi硬件中断。si软件中断。st实时。

top
top - 14:31:20 up 35 min, 4 users, load average: 2.25, 1.74, 1.68
 Tasks: 71 total, 1 running, 70 sleeping, 0 stopped, 0 zombie
 Cpu(s): 2.3%us, 1.7%sy, 0.0%ni, 0.0%id, 96.0%wa, 0.0%hi, 0.0%si, 0.0%st
 Mem: 245440k total, 241004k used, 4436k free, 496k buffers
 Swap: 409596k total, 5436k used, 404160k free, 182812k cached

‌‌‌‌从CPU(s) 这行你可以看出当前CPU IO等待的情况,越高的wa表示越多的cpu资源在等待I/O。

上面的top命令从系统面大体展示I/O等待,但它没有告诉你哪个硬盘正在被影响,为此我们还需要使用iostat命令。

iostat -x 2 5
avg-cpu: %user %nice %system %iowait %steal %idle
  3.66 0.00 47.64 48.69 0.00 0.00

 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
 sda 44.50 39.27 117.28 29.32 11220.94 13126.70 332.17 65.77 462.79 9.80 2274.71 7.60 111.41
 dm-0 0.00 0.00 83.25 9.95 10515.18 4295.29 317.84 57.01 648.54 16.73 5935.79 11.48 107.02
 dm-1 0.00 0.00 57.07 40.84 228.27 163.35 8.00 93.84 979.61 13.94 2329.08 10.93 107.02

iostat -x 2 5命令将每2秒打印报告,共打印5次。iostata命令的-x选项打印更详细的报告信息。

iostat命令打印的第1个报告,数值是基于最后一次系统启动的时间统计的。基于这个原因,在大部份情况下,iostat命令打印出的第1个报告应该被忽略。

每个子报告都是基于上1次的报告。在这个例子中,iostat -x 2 5命令将打印5次报告。

第2份报告就是从第1份报告开始后的硬盘数据,第3份报告基于第2份,依此类推。

上述示例,sda盘的%utili达到了111.41%。这表示引起I/O慢的进程在写入sda磁盘盘。

因为我这个测试实例中只有1个硬盘,但对于有多硬盘的服务器来说,这可以缩小在使用I/O的进程范围。

iostat命令除了提供%utili信息外,像rrqm/s、wrqm/s这些每秒读、写的请求数,r/s、w/s每秒读写数也很有用。

iotop 命令查找高IO等待的进程

查看哪个进程使用硬盘最多,最简单的方法就是使用iotop命令。iotop命令定期采样磁盘的读写数据。

显示每个进程磁盘读DISK READ和 DISK WRITE写速度以及进程的IO优先级PRIO等信息。

通过查看磁盘的读DISK READ与写DISK WRITE,我们很容易就可以确定是bonnie++进程在频繁的使用磁盘IO。

iotop
Total DISK READ: 8.00 M/s | Total DISK WRITE: 20.36 M/s
  TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
 15758 be/4 root 7.99 M/s 8.01 M/s 0.00 % 61.97 % bonnie++ -n 0 -u 0 -r 239 -s 478 -f -b -d /tmp

ps 命令查找高IO等待的进程

虽然iotop好用,但主流的Linux发行版中是没有安装的。系统管理员总是会碰到这样的情况,他们没办法在短时间内简单地安装这些非默认命令。

如果iotop没办法用,可以使用PS命令来代替iotop命令。以下的步聚还是可以帮助你缩小进程的范围。

ps命令可以打印出内存,cpu的情况。但没办法打印磁盘I/O的情况。虽然ps命令没办法打印出I/O的情况,但它可以打印进程是否在等待I/O。

ps命令的STAT状态列提供进程当前的状态。D表示不间断睡眠。R正在运行。S可中断的睡眠,正在等待事件的完成。T已经终止进程。

X表示进程已经死亡,你可能永远不会看到此状态。Z表示已失效,通常称为僵尸进程,已终止但未由其父进程回收。

等待I/O的进程通常处于D状态,通过ps命令打印的信息我们就可以找到在等待IO的进程。

for x in `seq 1 1 10`; do ps -eo state,pid,cmd | grep "^D"; echo "----"; sleep 5; done
D 248 [jbd2/dm-0-8]
 D 16528 bonnie++ -n 0 -u 0 -r 239 -s 478 -f -b -d /tmp

命令会每5秒循环打印处于D状态的进程,共打印10次。但仅凭进程处于D状态,还不能完全确定就是该进程引起的I/O等待。

为了确定可疑的进程,我们还需要使用/proc文件系统。在这个虚拟文件系统里,每个进程都有一个IO文件,里面的数值跟iotop命令获取的I/O数值是一样的。

假设,我们怀疑引起高IO等待的进程bonnie++,它的进程PID是16528。我们可以运行命令cat /proc/16528/io查看进程磁盘IO数据。

cat /proc/16528/io
rchar: 562397689
wchar: 1073318747
syscr: 137395
syscw: 190792
read_bytes: 482344960
write_bytes: 524697984
cancelled_write_bytes: 16801792

read_byteswrite_bytes就这个进程读写硬盘的字节数。在这里,bonnie++已经读取了46MB,写入524MB的数据。

lsof 命令查看频繁读写的文件

lsof命令会为你展示指定进程打开的所有文件,为了减少打印的信息,可以仅使用-p选项打印指定进程打开的文件。

lsof -p 16528

减少I/O等待

优化应用程序的代码和数据库查询。这可以大大降低磁盘读/写的频率。这应该是您的第一种方法。

确保您有足够的可用内存,以便大约一半的服务器内存用于内存缓冲区和缓存,而不是使用交换空间和分页到磁盘。

调整您的系统、存储设备和 Linux 内核以提高存储性能和使用寿命。最后,如果一切都失败了。将存储设备升级到更快的SSD、NVMe或其他高吞吐量存储设备。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • IO
    IO
    +关注

    关注

    0

    文章

    448

    浏览量

    39148
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10860

    浏览量

    211725
  • Linux
    +关注

    关注

    87

    文章

    11303

    浏览量

    209441
  • 命令
    +关注

    关注

    5

    文章

    684

    浏览量

    22021
收藏 人收藏

    评论

    相关推荐

    何在Linux中使用htop命令

    本文介绍如何在 Linux 中使用 htop 命令
    的头像 发表于 12-04 14:45 2013次阅读
    如<b class='flag-5'>何在</b><b class='flag-5'>Linux</b>中使用htop<b class='flag-5'>命令</b>

    linux运维命令大全

    Linux高端运维学习需要掌握大量的命令及相关工具,通读bash man page、掌握VIM使用、了解SSH是Linux高端运维工程师必备功课,熟练掌握Linux高端运维实用
    发表于 03-15 16:36

    Linux查看资源使用情况和性能调优常用的命令

    目录 前言 top命令 htop命令 ps命令 free命令 vmstat命令 iosat命令
    的头像 发表于 11-12 17:54 4208次阅读

    何在Linux使用pidof命令

    `pidof`是一个命令行程序,可让您找到正在运行程序的进程ID。在教程中,我们将说明如何在Linux 使用pidof命令
    的头像 发表于 12-05 17:01 2328次阅读

    何在Linux使用touch命令

    Linux touch命令用于更改文件时间戳。但touch命令的最常见用法是创建文件。
    的头像 发表于 12-05 17:21 2078次阅读

    何在Linux使用rpm命令

    RPM是基于RedHat Linux发行版的软件包管理器,例如CentOS和Fedora。RPM还指`rpm`命令和`.rpm`文件扩展名称。
    的头像 发表于 01-04 17:14 1672次阅读

    何在Linux上使用粘贴命令

    Linux中的粘贴命令是一个有用的工具,用于将多个文件或文本行合并到单个文件或输出中。它通常与剪切命令结合使用,允许用户剪切特定行或文本部分并将其粘贴到其他地方。在本文中,小编将探讨 Linu
    的头像 发表于 02-08 16:58 1836次阅读

    何在Linux中高效运行终端命令

    Linux 终端是一个功能强大的工具,允许您使用命令执行各种系统操作。文件操作、程序管理和服务自动化是您可以使用 shell 命令高效执行的一些操作。
    的头像 发表于 03-20 09:39 719次阅读

    何在Linux中使用progress命令

    progress 命令是一个简单但功能强大的 Linux/Unix 命令行工具,可让用户查看文件操作的进度。
    的头像 发表于 04-08 15:51 2471次阅读

    何在Linux中高效运行终端命令

    Linux 终端是一个功能强大的工具,允许您使用命令执行各种系统操作。文件操作、程序管理和服务自动化是您可以使用 shell 命令高效执行的一些操作。
    的头像 发表于 04-13 10:34 678次阅读

    何在Linux命令行中运行Python脚本

    Python 脚本。 在本文中,我们将详细介绍如何在 Linux 命令行中运行 Python 脚本。我们将讨论以下主题:
    的头像 发表于 05-12 14:49 1686次阅读

    恒讯科技分析:如何在Linux上使用rm命令删除文件和目录?

    本指南展示了如何在Linux中使用rm命令行删除文件、目录和其他内容?
    的头像 发表于 06-09 17:02 1180次阅读

    Linux查看IO状态的常用命令都有哪些呢?

    介绍下Linux的3个常用I/O相关命令,解决I/O压力过大问题时用iostat,查看磁盘的I/O状态用iotop,查看I/O进程排名用lsof
    的头像 发表于 01-16 09:28 5384次阅读

    华纳云监视Linux磁盘IO性能命令:iotop,iostat,vmstat,atop,dstat,ioping

    以下介绍6个监视 Linux 磁盘IO性能的命令(工具),它们分别是iotop、iostat、vmstat、atop、dstat、ioping,以下将附上简单的使用方法。 前言 磁盘IO
    的头像 发表于 10-24 14:43 178次阅读

    Linux系统监控报I/O问题怎么办

    Linux系统出现了性能问题,一般我们可以通过top、iostat、free、vmstat等命令来查看初步定位问题。其中iostat可以给我们提供丰富的IO状态数据。 一、查询
    的头像 发表于 12-18 09:07 263次阅读