ionice / nice の正しい使い分け

  • URLをコピーしました!

Linuxサーバーで負荷対策を行う際、

  • nice を設定したのに効果がない
  • ionice っていつ使うの?
  • 結局どっちを使えばいいのか分からない

という悩みを持つ運用担当者は非常に多いです。

本記事では、 nice と ionice の役割の違いを明確にし、 どの場面でどちらを使うべきか実務レベルで迷わない形で解説します。

目次

結論:CPUを制御するのが nice、ディスクI/Oを制御するのが ionice

まず結論です。

項目niceionice
制御対象CPUディスクI/O
効果が出る場面CPU負荷が高い時I/O wait が高い時
効果がない場面I/O待ちが原因CPU処理が原因

ここを誤解していると、何を設定しても改善しません。

niceとは何か(CPU優先度制御)

nice は、 CPUをどれだけ使ってよいかの優先度を制御します。

CPUが取り合いになった時、 どのプロセスを先に実行するか を決める仕組みです。

niceの基本

  • 値の範囲:-20 ~ 19
  • 数値が小さいほど優先度が高い
  • デフォルトは 0

設定例

nice -n 10 tar czf backup.tar.gz /data

→ CPUが空いている時だけ動かしたい処理に有効

ioniceとは何か(ディスクI/O優先度制御)

ionice は、 ディスクI/Oの優先度を制御します。

I/O wait が高い環境では、 nice はほぼ効果がありません。

ioniceのクラス

  • idle(クラス3):完全な空き時間のみ
  • best-effort(クラス2):通常制御
  • realtime(クラス1):最優先(注意)

よく使う設定

ionice -c3 tar czf backup.tar.gz /data

→ 業務影響を最小限にしたバックアップに最適

niceが効かない典型パターン

以下の状態では、 nice をいくら下げても意味がありません。

  • I/O wait が高い
  • ディスク %util が高い
  • プロセスがI/O待ちで止まっている

この場合、 CPUではなくディスクがボトルネックです。

ioniceを使うべき典型ケース

  • バックアップ処理
  • ログ圧縮(gzip / xz)
  • rsync による大量コピー
  • 一時的なバッチ処理

「急がないが重い処理」は、 基本的に ionice を使います。

niceを使うべき典型ケース

  • CPUを多用する計算処理
  • 画像・動画エンコード
  • CPU集約型バッチ

I/OよりCPUが重い処理が対象です。

nice + ionice を併用する正解パターン

実務では、 両方を同時に使うのが正解な場面も多いです。

例:業務影響を極小化したバックアップ

nice -n 10 ionice -c3 tar czf backup.tar.gz /data

→ CPUもI/Oも「空いている時だけ使う」動きになります。

設定後に確認すべきポイント

CPU側

top
  • CPU使用率が抑えられている

I/O側

iotop
  • 対象プロセスが下位にいる

「正しく使い分けできている」と判断できる状態

  • 業務トラフィックに影響が出ない
  • I/O wait が上昇しない
  • 処理は裏で確実に進んでいる

よくある誤解

  • nice を下げれば何でも速くなる
  • ionice は特殊用途
  • CPUが低い=サーバー正常

ボトルネックに合わない制御は無意味です。

まとめ

nice と ionice は、 競合するものではなく、役割が違うツールです。

  • CPUが原因 → nice
  • ディスクI/Oが原因 → ionice
  • 業務影響を抑えたい → 併用

本記事の使い分けを理解すれば、 「効かないチューニング」から卒業できます。

目次