当前位置: 首页 > 科技观察

如何在Linux中使用iotop和iostat监控磁盘I-O活动?

时间:2023-03-15 14:25:52 科技观察

你知道我们使用什么工具来对Linux中的实时磁盘活动进行故障排除和监控吗?如果Linux系统性能变慢,我们会使用top命令来检查系统性能。它用于检查服务器上是什么进程占用了如此高的使用率,这对大多数Linux系统管理员来说很常见,并且在现实世界中被Linux系统管理员广泛采用。如果您在过程输出中没有看到很大的差异,您仍然可以选择查看其他内容。我建议您检查顶部输出中的wa状态,因为大多数情况下服务器性能会因硬盘上的高I/O读写而降低。如果它很高或波动,则可能是它的原因。因此,我们需要检查硬盘上的I/O活动。我们可以在Linux中使用iotop和iostat命令来监视所有磁盘和文件系统的磁盘I/O统计信息。什么是iotop?iotop是一个类似于top的工具,可以显示实时磁盘活动。iotop监控Linux内核输出的I/O使用信息,显示系统中进程或线程当前的I/O使用情况。它显示每个进程/线程的读写I/O带宽。它还显示线程/进程等待换入和等待I/O所花费的时间百分比。TotalDISKREAD和TotalDISKWRITE的值一方面代表进程和内核线程之间的总读写带宽,另一方面代表内核块设备子系统。ActualDISKREAD和ActualDISKWRITE的值代表内核块设备子系统和底层硬件(HDD、SSD等)对应的实际磁盘I/O带宽。如何在Linux中安装iotop?我们可以在包管理器的帮助下轻松安装它,因为这个包在所有Linux发行版存储库中都可用。对于Fedora系统,使用DNF命令安装iotop。$sudodnfinstalliotop对于Debian/Ubuntu系统,使用API-GET命令或APT命令安装iotop。$sudoaptinstalliotop对于基于ArchLinux的系统,使用Pacman命令安装iotop。$sudopacman-Siotop对于RHEL/CentOS系统,使用YUM命令安装iotop。$sudoyuminstalliotop对于使用openSUSELeap的系统,使用Zypper命令安装iotop。$sudozypperinstalliotop如何在Linux中使用iotop命令监控磁盘I/O活动/统计信息?iotop命令有很多参数来检查磁盘I/O变化:#iotop10如果你想检查哪个进程实际在做I/O,那么运行带有-o或--only参数的iotop命令。#iotop--only11Details:IO:显示每个进程的I/O利用率,包括disk和swap。SWAPIN:它只显示每个进程的交换使用情况。什么是iostat?iostat用于报告中央处理单元(CPU)统计信息以及设备和分区的I/O统计信息。iostat命令通过观察设备活动时间相对于它们的平均传输速率来监视系统I/O设备负载。iostat命令生成的报告可用于更改系统配置以更好地平衡物理磁盘之间的I/O负载。每次运行iostat命令时都会报告所有统计信息。该报告包含一个CPU标头,后跟一行CPU统计信息。在多处理器系统上,CPU统计信息计算为系统级别所有处理器的平均值。设备标题行后跟一行显示每个已配置设备的统计信息。iostat命令生成两种类型的报告,CPU使用率报告和设备使用率报告。如何在Linux中安装iostat?iostat工具是sysstat包的一部分,因此我们可以在包管理器的帮助下轻松安装它,因为它在所有Linux发行版存储库中都可用。对于Fedora系统,使用DNF命令安装sysstat。$sudodnfinstallsysstat对于Debian/Ubuntu系统,使用APT-GET命令或APT命令安装sysstat。$sudoaptinstallsysstat对于基于ArchLinux的系统,使用Pacman命令安装sysstat。$sudopacman-Ssysstat对于RHEL/CentOS系统,使用YUM命令安装sysstat。$sudoyuminstallsysstat对于openSUSELeap系统,使用Zypper命令安装sysstat。$sudozypperinstallsysstat如何在Linux中使用sysstat命令监控磁盘I/O活动/统计信息?iostat命令中有很多参数可以查看I/O和CPU的变化统计信息。运行不带参数的iostat命令以查看完整的系统统计信息。#iostatLinux4.19.32-1-MANJARO(daygeek-Y700)2019年4月18日星期四_x86_64_(8CPU)avg-cpu:%user%nice%system%iowait%steal%idlekB_dscd/skB_readkB_wrtnkB_dscdnvme0n16.68122.905844.905844575072060sda0.186.7780.240.003115036369247640loop00.000.000.000.00216000loop10.000.000.000.00109300loop20.000.000.000.00107700运行iostat命令加上-dparametertoviewtheI/Ostatisticsofalldevices.#iostat-dLinux4.19.32-1-MANJARO(daygeek-Y700)Thursday18April2019_x86_64_(8CPU)DevicetpskB_read/skB_wrtn/skB_dscd/skB_readkB_wrtnkB_dscdnvme0n16.68126.95124.970.0058420030575090900sda0.186.7780.240.003115292369247640loop00.000.000.000.00216000loop10.000.000.000.00109300loop20.000.000.000.00107700运行iostat命令/plus-p查看所有设备的分区统计信息#iostat-pLinux4.19.32-1-MANJARO(daygeek-Y700)周四18April2019_x86_64_(8CPU)avg-cpu:%user%nice%system%iowait%steal%idle29.420.0216.450.120.0053.99DevicetpskB_read/skB_wrtn/skB_dscd/skB_readkB_wrtnkB_dscdnvme0n16.68126.94124.960.0058420062575122780nvme0n1p16.40124.46118.360.0057279753544748980nvme0n1p20.272.476.600.00113806930373800sda0.186.7780.230.003116060369247640sda10.000.010.000.00322400sda20.186.7680.230.003111508369247640loop00.000.000.000.00216000loop10.000.000.000.00109300loop20.000.000.000.00107700运行带有-x参数的iostat命令显示所有设备的详细I/O统计信息#iostat-xLinux4.19.32-1-MANJARO(daygeek-Y700)2019年4月18日星期四_x86_64_(8CPU)avg-cpu:%user%nice%system%iowait%steal%idle29.410.0216.450.120.0054.00Devicer/srkB/srrqm/s%rrqmr_awaitrareq-szw/swkB/swrqm/s%wrqmw_awaitwareq-szd/sdkB/sdrqm/s%drqmd_awaitdareq-szaqu-sz%utilnvme0n12.45126.930.6019.740.4051.744.23124.965.1254.763.1629.540.000.000.000.000.000.000.3130.28sda0.066.770.000.008.34119.200.1280.2319.9499.4031.84670.730.000.000.000.000.000.000.000.13loop00.000.000.000.000.0819.640.000.000.000.000.000.000.000.000.000.000.000.000.000.00loop10.000.000.000.000.4012.860.000.000.000.000.000.000.000.000.000.000.000.000.000.00loop20.000.000.000.000.3819.580.000.000.000.000.000.000.000.000.000.000.000.000.000.00运行iostat命令加上-d[设备名]ParameterstoviewtheI/Ostatisticsofaspecificdeviceanditspartitions#iostat-p[Device_Name]#iostat-psdaLinux4.19.32-1-MANJARO(daygeek-Y700)Thursday18April2019_x86_64_(8CPU)avg-cpu:%user%nice%system%iowait%steal%idle29.380.0216.430.120.0054.05DevicetpskB_read/skB_wrtn/skB_dscd/skB_readkB_wrtnkB_dscdsda0.186.7780.210.003117468369247640sda20.186.7680.210.003112916369247640sda10.000.010.000.00322400运行iostat命令加上-m参数以MBViewstatisticsforalldevicesinunitsratherthanKB.DisplaysoutputinKBbydefault.#iostat-mLinux4.19.32-1-MANJARO(daygeek-Y700)2019年4月18日星期四_x86_64_(8CPU)avg-cpu:%user%nice%system%iowait%steal%idle29.360.0216.410.120.0054.09MBtDevice/sMB_wrtn/sMB_dscd/sMB_readMB_wrtnMB_dscdnvme0n16.680.120.120.0057050561760sda0.180.010.080.003045360590loop00.000.000.000.00200loop10.000.000.000.00100loop20.000.000.000.00100运行Theiostat命令使用以下格式的特定时间间隔。在此示例中,我们打算以5秒的捕获间隔捕获两个报告。#iostat[间隔][报告数量]#iostat52Linux4.19.32-1-MANJARO(daygeek-Y700)2019年4月18日星期四_x86_64_(8CPU)avg-cpu:%user%nice%system%iowait%steal%idle29.350.0216.410.120.0054.10DevicetpskB_read/skB_wrtn/skB_dscd/skB_readkB_wrtnkB_dscdnvme0n16.68126.89124.950.0058420116575253440sda0.186.7780.200.003118492369247640loop00.000.000.000.00216000loop10.000.000.000.00109300loop20.000.000.000.00107700avg-cpu:%user%nice%system%iowait%steal%idle3.710.002.510.050.0093.73DevicetpskB_read/skB_wrtn/skB_dscd/skB_readkB_wrtnkB_dscdnvme0n119.000.20311.400.00115570sda0.2025.600.000.0012800loop00.000.000.000.00000loop10.000.000.000.00000loop20.000.000.000.00000运行iostat命令与-NparameterstoviewtheLVMdiskI/Ostatisticsreport#iostat-NLinux4.15.0-47-generic(Ubuntu18.2daygeek.com)Thursday18April2019_x86_64_(2CPU)avg-cpu:%user%nice%system%iowait%steal%idle0.380.070.180.260.0099.12DevicetpskB_read/skB_wrtn/skB_readkB_wrtnsda3.6057.0769.069687291172340sdb0.020.330.0056800sdc0.010.120.00210802g-2gvol10.000.070.0012040运行nfsiostat命令来查看NetworkFileSystem(NFS)的I/O统计。#nfsiostat