「バックアップスクリプトを動かすと、サーバー全体が遅くなる」
Linuxサーバーを運用していると、こうした「特定のプロセスの優先度を下げて、他の処理を邪魔しないように動かしたい」という場面に必ず出くわします。そんなときに使うのが
nice コマンドです。この記事では、
nice コマンド でプロセスの優先度(nice値)を制御する方法を解説します。基本書式から、実行中プロセスの優先度を変更する renice、I/O優先度を制御する ionice、systemd時代のCPU/IOWeight指定までまとめました。・一般ユーザーは優先度を下げる(プラス方向)のみ可能
・実行中プロセスの優先度を変更する renice の使い方
・I/O優先度を制御する ionice(バックアップ用途で重要)
・systemd時代のリソース制御(CPUWeight / IOWeight / Nice= ディレクティブ)
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
※本記事はsystemd前提のディストリビューション(RHEL系9系、Ubuntu 22.04 / 24.04 LTS など)で動作確認しています。systemd採用環境では、niceやreniceに加えて、ユニットファイルでリソース制御を宣言する方法もあります。
niceコマンドとは(プロセスの優先度を制御する)
nice は、コマンドを実行する際に「nice値」を指定して、プロセスのCPUスケジューリング優先度を制御するコマンドです。nice値は -20〜19 の範囲で指定し、値が小さいほど優先度が高くなります。デフォルトのnice値は 0 です。
・-20:最高優先度(root権限が必要)
・0:通常優先度(デフォルト)
・19:最低優先度(CPUを最も譲る)
一般ユーザーは優先度を下げる(プラス方向に増やす)ことだけ可能で、優先度を上げる(マイナス方向)にはroot権限が必要です。これは「自分の処理だけ早くしようとして他人の処理を遅らせる」ことを防ぐためです。
基本的な使い方(コマンド実行時にnice値を指定)
もっとも基本的な使い方は、-nオプションでnice値を指定し、その後ろに実行したいコマンドを書くことです。# nice値を10にしてバックアップスクリプトを実行(優先度を下げる) $ nice -n 10 /home/admin/backup.sh # nice値を19(最低優先度)にして大規模なtarアーカイブを作成 $ nice -n 19 tar czf /backup/data.tar.gz /var/data/ # nice値を-5(高優先度)にして実行(root権限が必要) $ sudo nice -n -5 /usr/local/bin/critical-process
現在のnice値を確認する
何もオプションなしでnice を実行すると、現在のシェルのnice値が表示されます。$ nice 0
ps -o pid,ni,cmd を使います。NI列がnice値です。$ ps -e -o pid,ni,user,cmd | grep backup 12345 10 admin /home/admin/backup.sh 12350 19 admin tar czf /backup/data.tar.gz /var/data/
実行中のプロセスの優先度を変更する:renice
niceは「コマンドを起動する瞬間」にしかnice値を指定できません。すでに動いているプロセスの優先度を変えたいときは、reniceコマンドを使います。# PID 12345 のnice値を15に変更 $ renice -n 15 -p 12345 12345 (process ID) old priority 0, new priority 15 # 特定ユーザーの全プロセスのnice値を10に変更 $ sudo renice -n 10 -u admin # pgrepと組み合わせて、コマンド名から一括変更 $ sudo renice -n 19 -p $(pgrep -d' ' rsync)
I/O優先度も制御する:ionice
バックアップやログ集約のような「ディスクI/Oを大量に使う処理」では、CPU優先度(nice)だけ下げてもI/O負荷で他のプロセスが詰まることがあります。こうした場面ではionice でI/Oスケジューリングのクラスを下げるのが効果的です。# I/Oクラスを「idle」(最低優先度)にしてバックアップを実行 $ ionice -c 3 /home/admin/backup.sh # besteffort クラス、優先度7(最低)で実行 $ ionice -c 2 -n 7 tar czf /backup/data.tar.gz /var/data/ # 実行中プロセスのI/O優先度を変更 $ sudo ionice -c 3 -p 12345
・-c 2:best-effort(通常優先度・優先度0〜7)
・-c 3:idle(他プロセスがI/Oを使っていない時だけ動く)
バックアップやアーカイブ用途では
nice -n 19 ionice -c 3 の組み合わせが鉄板パターンです。systemd時代のリソース制御(CPUWeight / IOWeight / Nice=)
systemdユニットファイルで起動するサービスやジョブ(systemd timer経由のバッチなど)は、ユニットファイル内で直接nice値やCPU/IOWeightを指定できます。niceコマンドで起動する代わりにユニット側で宣言しておくと、運用が一気にシンプルになります。# /etc/systemd/system/nightly-backup.service [Unit] Description=Nightly backup job [Service] Type=oneshot ExecStart=/home/admin/backup.sh # nice値(-20〜19) Nice=19 # CPU重み付け(10〜10000、デフォルト100、低いほどCPUを譲る) CPUWeight=10 # I/O重み付け(同様に低いほどI/Oを譲る) IOWeight=10 # CPU使用率の上限(コア数 × 100%) CPUQuota=20%
稼働中のサービスのリソース制限を一時変更する
# httpdサービスのCPUWeightを一時的に下げる $ sudo systemctl set-property httpd.service CPUWeight=50 # 設定を確認 $ systemctl show httpd.service -p CPUWeight
本記事のまとめ
| やりたいこと | コマンド・設定 |
|---|---|
| コマンド起動時に優先度を下げる | nice -n 10 コマンド |
| 実行中プロセスの優先度を変更 | renice -n 15 -p PID |
| 特定ユーザーの全プロセスを変更 | renice -n 10 -u ユーザー名 |
| I/O優先度を下げる(バックアップ用) | ionice -c 3 コマンド |
| CPU + I/O両方下げる鉄板パターン | nice -n 19 ionice -c 3 コマンド |
| systemdサービスでnice値を指定 | ユニットの[Service]に Nice=19 |
| 稼働中サービスのリソース制限 | systemctl set-property NAME CPUWeight=50 |
| プロセスのnice値を確認 | ps -e -o pid,ni,cmd |
プロセスの優先度をコントロールしてサーバー負荷を管理できていますか?
コマンドの使い方を一つひとつ覚えていくのは時間がかかります。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:dateコマンドの使い方|日付・時刻の表示から書式指定・設定変更まで
- 前のページへ:psコマンドでプロセスを確認する方法|auxと-efの違いやgrep検索も
- この記事の属するカテゴリ:Linuxコマンド・LinuxコマンドK-O・プロセス管理コマンドへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます