
以下は net-snmp の出力です。ご覧のとおり、diskIOLA は使用できません。
SNMP table: UCD-DISKIO-MIB::diskIOTable
diskIOIndex diskIODevice diskIONRead diskIONWritten diskIOReads diskIOWrites diskIOLA1 diskIOLA5 diskIOLA15 diskIONReadX diskIONWrittenX
25 sda 845276160 2882477056 576632 42597061 ? ? ? 5140243456 883350772736
ここでの定義によればhttp://www.net-snmp.org/docs/mibs/ucdDiskIOMIB.html:
ディスクIOLAxディスクの x 分間平均負荷 (%) を意味します。
表内の他の値は次のとおりです。
- diskIONRead - 起動以降にこのデバイスから読み取られたバイト数。
- diskIONWritten - 起動以降にこのデバイスに書き込まれたバイト数。
- diskIOReads - 起動以降のこのデバイスからの読み取りアクセスの数。
- diskIOWrites - 起動以降のこのデバイスへの書き込みアクセス回数
では、この負荷はサーバーで収集されないので、手動でどのように計算できるのでしょうか?
最終的には、ディスク IO が重いかどうかをユーザーが確認できるグラフを表示したいと考えています。これは、読み取り/書き込みバイト数/秒または読み取り/書き込み要求数/秒を使用して表示できます。
読み取り/書き込み要求数/秒のみを表示すると、大量の I/O が行われていることがわかります。ただし、ディスクの R/W 速度がこれによって影響を受けるかどうかはわかりません。
また、R/W 速度だけを表示しても、速度が影響を受けた理由 (I/O 操作が多すぎるためか、非同期書き込み用のバッファ メモリが不足しているためか) はわかりません。したがって、両方を表示する必要があります。
しかし、ディスク IOLoad のその他の値とは何を意味し、それをどのように計算すればよいのでしょうか。また、なぜ snmp で収集されないのでしょうか。これを有効にすると、大きな負荷が発生しますか? この値の収集に大きな負荷が発生する場合は、手動で計算できます。しかし、計算式は何ですか?
答え1
あなたが持っている情報だけでは、ディスク使用率 % を計算するには不十分です。ディスク使用率 % は次のように計算されますdisk_time_spent_in_io / elapsed_time
。
たとえば、ディスクが 1 秒間に IO を実行するのに 0.25 秒を費やした場合、ディスクの使用率は 25% になります。
使用率 % に関しては、操作数は意味がありません。ディスクと、実行している IO の種類 (バルクとランダム) に応じて、10 IOPS または 10000 IOPS で 100% 使用される可能性があります。それを知る唯一の方法は、ディスクがそれらの IOPS を実行するのにどのくらいの時間がかかるかを確認することです。
答え2
解決策を探しているすべての人のために、iostat は からパーセンテージを計算します/sys/block/sda/stat
。式はおおよそ次のようになります。
{now,past}_tot_ticks = total time this block device has been active (/sys/block/sda/stat)
{now,past}_uptime = uptime in /proc/uptime (first value)
percentage = (now_tot_ticks - past_tot_ticks) / (now_uptime - past_uptime) / 10
1 秒間の IO 負荷をパーセンテージで取得するコマンド:
$ cat \
<(cat /sys/block/sda/stat && cat /proc/uptime) \
<(sleep 1 && cat /sys/block/sda/stat && cat /proc/uptime) \
| awk -v RS="" '{printf "%.2f%\n", ($27-$10)/($33-$16) / 10}';
さらに読む:
[1]https://www.kernel.org/doc/Documentation/block/stat.txt
[2]https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/deployment_guide/s2-proc-uptime
[3]https://github.com/sysstat/sysstat/blob/v11.4.3/iostat.c