ioniceが効かない時に確認すべきポイント

  • URLをコピーしました!

ディスクI/O負荷対策として ionice を設定したのに、

  • I/O wait が下がらない
  • 業務レスポンスが改善しない
  • 「ioniceって意味あるの?」と感じた

この状況は、 ioniceの使い方が間違っているのではなく、前提条件が満たされていない ことがほとんどです。

本記事では、 ioniceが効かない時に必ず確認すべきポイント上から順に潰せば原因に辿り着ける構成で解説します。

目次

結論:ioniceは「I/Oの取り合い」が起きていないと効かない

ionice は、 ディスクI/Oの競合時に優先度を調整する仕組みです。

つまり、

  • そもそもI/Oが詰まっていない
  • ディスクに余裕がある

状態では、 効果が見えなくて当然です。

確認①:本当にディスクI/Oがボトルネックか

確認コマンド

iostat -x 1

判断基準

  • %util が常時 80~100%
  • await が高止まり

この状態でなければ ionice が効かなくても正常です。

確認②:ioniceを設定したプロセスは正しいか

ionice は、 設定したプロセスにしか効きません

よくある失敗として、

  • 親プロセスだけに設定
  • 実際にI/Oを出す子プロセスに未設定

があります。

確認方法

ps -o pid,ppid,ni,cmd -C プロセス名

I/Oを出しているPIDに設定されているか を確認します。

確認③:ioniceのクラス選択は正しいか

ioniceには クラスという概念があります。

主に使うクラス

  • class 3(idle):空き時間のみ
  • class 2(best-effort):通常制御

よくある誤解

class 3 を使えば「必ず影響が減る」と思いがちですが、

  • そもそもディスクが常に忙しい

状態では、 処理がほぼ進まないこともあります。

確認④:ストレージやファイルシステムが対応しているか

ionice は、 ブロックI/Oスケジューラに依存します。

以下の場合、 効果が分かりづらいことがあります。

  • NVMe
  • 仮想環境(クラウド)
  • ストレージ側でI/O制御されている

この場合、 OS側のioniceより下位レイヤーが支配的です。

確認⑤:他のプロセスがリアルタイム優先になっていないか

他のプロセスが、

  • ionice class 1(realtime)

で動作していると、 ioniceを下げても効果が見えません

class 1 は、 システム全体に影響するため原則非推奨です。

確認⑥:ionice単体で解決しようとしていないか

ionice は、 あくまで「調整」ツールです。

以下のようなケースでは、 根本解決になりません。

  • ディスク性能不足
  • 処理量が明らかに多すぎる
  • 同時実行数が過剰

この場合は、 構成変更や処理設計の見直しが必要です。

「ioniceが効いている」と判断できる状態

  • 業務プロセスのI/O待ちが減る
  • バックアップ等が下位に追いやられる
  • I/O wait が急上昇しない

ioniceが効かない時の正しい思考手順

  1. I/Oが本当に詰まっているか確認
  2. 犯人プロセスを iotop で特定
  3. 正しいPIDに設定
  4. クラス選択を見直す
  5. 構成・性能不足を疑う

まとめ

ionice が効かないのは、 設定ミスではなく、前提条件が崩れている ケースがほとんどです。

重要なのは、 「今、本当にI/Oの取り合いが起きているか」 を数値で確認することです。

本記事のチェックポイントを上から潰せば、 ioniceに対する誤解と無駄な設定から脱却できます。

目次