niceコマンドでプロセス優先度を変更する方法|renice・ionice・systemd時代の制御までコマンド

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxコマンド, LinuxコマンドK-O, プロセス管理コマンド > niceコマンドでプロセス優先度を変更する方法|renice・ionice・systemd時代の制御までコマンド
「夜間バッチが重くて、業務時間中のWebレスポンスに影響が出る」
「バックアップスクリプトを動かすと、サーバー全体が遅くなる」
Linuxサーバーを運用していると、こうした「特定のプロセスの優先度を下げて、他の処理を邪魔しないように動かしたい」という場面に必ず出くわします。そんなときに使うのが nice コマンドです。

この記事では、nice コマンド でプロセスの優先度(nice値)を制御する方法を解説します。基本書式から、実行中プロセスの優先度を変更する renice、I/O優先度を制御する ionice、systemd時代のCPU/IOWeight指定までまとめました。
【この記事でわかること】 ・nice値の意味(-20〜19、小さいほど優先度が高い)
・一般ユーザーは優先度を下げる(プラス方向)のみ可能
・実行中プロセスの優先度を変更する renice の使い方
・I/O優先度を制御する ionice(バックアップ用途で重要)
・systemd時代のリソース制御(CPUWeight / IOWeight / Nice= ディレクティブ)

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

※本記事はsystemd前提のディストリビューション(RHEL系9系、Ubuntu 22.04 / 24.04 LTS など)で動作確認しています。systemd採用環境では、nicereniceに加えて、ユニットファイルでリソース制御を宣言する方法もあります。

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

プロセス単位でnice値を確認するには 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)

renice も一般ユーザーは「優先度を下げる方向」にしか変更できません。「最初は通常優先度で起動して、途中から優先度を下げる」という使い方ができるので、運用中のジョブ調整に重宝します。

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 1:realtime(最優先・root限定)
-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%

systemd unit経由で制御するメリットは、リソース制限の設定が「コードレビュー可能なファイル」として残ることと、cgroups v2と統合されていて確実にリソースが制限されることです。

稼働中のサービスのリソース制限を一時変更する

# 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日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。