haizhilingyu 的个人知识记录

Open Source, Open Mind,
Open Sight, Open Future!

Linux磁盘状态信息文件

Linux磁盘状态信息文件

/sys/block/*/stat文件代表某个磁盘的状态信息,下面是sda磁盘的状态信息说明

磁盘状态文件说明

在Linux系统中,/sys/block/sda/stat文件提供了关于磁盘设备/dev/sda的统计信息。这个文件的每一列代表了不同的统计数据,以下是常见的列及其含义:

  1. read_ios: 读取操作的累计次数(包括读取扇区的操作)。
  2. read_merges: 由于合并而导致的读取操作次数减少的数量。
  3. read_sectors: 读取的扇区总数。
  4. read_ticks: 读取操作花费的总毫秒数(可以用于计算平均每次读取操作的耗时)。
  5. write_ios: 写入操作的累计次数(包括写入扇区的操作)。
  6. write_merges: 由于合并而导致的写入操作次数减少的数量。
  7. write_sectors: 写入的扇区总数。
  8. write_ticks: 写入操作花费的总毫秒数(可以用于计算平均每次写入操作的耗时)。
  9. in_flight: 目前进行中的I/O操作数量。
  10. io_ticks: 按权重计算的I/O延迟时间,与read_tickswrite_ticks相关,但不包括进行中的I/O操作。
  11. time_queued: I/O请求在队列中等待的总毫秒数。

这些数据可以用于监控磁盘的性能和负载。例如,read_ioswrite_ios可以告诉我们磁盘进行了多少次读取和写入操作,而read_tickswrite_ticks可以告诉我们这些操作总共花费了多长时间。

要查看这些统计信息,可以使用cat命令在终端中读取/sys/block/sda/stat文件的内容:

cat /sys/block/sda/stat

请注意,不同的Linux发行版和内核版本可能会有细微的差别,但上述列出的是最常见的统计项。如果你的系统上/sys/block/sda/stat文件的列数或含义有所不同,请参考你的Linux发行版的文档或内核源代码中的相关注释。

Java代码示例


private static void computeDiskStats() {
        String devStat = RuntimeUtil.execForStr("cat /sys/block/" + read.get("name").toString().replace("/dev/", "") + "/stat");
	int[] UDEV_STAT_ORDERS = new int[UdevStat.values().length];
	UdevStat[] var0 = UdevStat.values();
	int statLength = var0.length;

	for (int var2 = 0; var2 < statLength; ++var2) {
	    UdevStat stat = var0[var2];
	    UDEV_STAT_ORDERS[stat.ordinal()] = stat.getOrder();
	}
	statLength = 11;
	if (!devStat.isEmpty()) {
	    statLength = ParseUtil.countStringToLongArray(devStat, ' ');
	}
	long[] devstatArray = ParseUtil.parseStringToLongArray(devStat, UDEV_STAT_ORDERS, statLength, ' ');
	int SECTORSIZE = 512;
	// Reads and writes are converted in bytes

        long reads = devstatArray[UdevStat.READS.ordinal()];
        long readBytes = devstatArray[UdevStat.READ_BYTES.ordinal()] * 512L;
        long writes = devstatArray[UdevStat.WRITES.ordinal()];
        long writeBytes = devstatArray[UdevStat.WRITE_BYTES.ordinal()] * 512L;
        long currentQueueLength = devstatArray[UdevStat.QUEUE_LENGTH.ordinal()];
        long transferTime = devstatArray[UdevStat.ACTIVE_MS.ordinal()];
    }

enum UdevStat {
        READS(0),
        READ_BYTES(2),
        WRITES(4),
        WRITE_BYTES(6),
        QUEUE_LENGTH(8),
        ACTIVE_MS(9);

        private int order;

        public int getOrder() {
            return this.order;
        }

        private UdevStat(int order) {
            this.order = order;
        }
    }

标题:Linux磁盘状态信息文件
作者:haizhilingyu
地址:https://xiweihai.site/articles/2024/04/28/1714312186245.html