Linux nice コマンド:優先度の指定と renice での変更、CPU を奪い合うときの取り分を実測

公正取引委員会の広告文 Ver 3.1
公正取引委員会の広告文 Ver 3.2(モバイル専用)
テスト環境RHEL系AlmaLinux 9.8root・一般ユーザーアカウント2026-10-17 確認

Linuxのniceコマンドは、プログラムを実行するときにCPUをどれだけ譲るかを決めるnice値(-20〜19)を指定するコマンドです。AlmaLinux 9サーバーでCPUコア1つに2つのタスクを割り当て、nice値を変えながら測った結果、取り分はCPUを奪い合うときにだけ分かれ、nice 19のタスクは1.4%しか使いませんでした。

すでに実行中のプロセスはreniceで変更し、ディスク側の譲り合いはioniceが担います。3つのコマンドとも、rootユーザーと一般ユーザーで実際に実行した出力をそのまま載せています。

1️⃣ Linuxのniceコマンド:値の範囲とCPUを奪い合うときの取り分

nice値はCPU時間を分けるときにどれだけ譲るかを決める数値で、-20から19まで指定できます。通常のプログラムは0で実行され、-20が最も先に処理され、19が最も多く譲ります。

数値が大きいほど先に処理されると思いがちですが、nice値は逆です。Linuxのスケジューラーはnice値ごとに重みを決め、その比率でCPU時間を配分します。nice 0は1024、10は110、19は15です。

譲り合いはCPUを奪い合うときにだけ起こります。空いているCPUがあれば、nice 19のタスクも待たずに実行されます。バスの優先席が空いていれば誰でも座り、混んでいるときだけ席を譲るのと同じです。

🧭 CPUが空いているときと奪い合うときのnice値
解説ダイアグラム
🖥️ CPU
⚖️ タスクB
🖥️ 空いているCPUがあり、タスクごとにコア1つずつ🖥️ 1つのCPUコアを2つのタスクで使用
タスクAnice 0 · 重み1024
100%50.0%90.3%98.6%
タスクBnice 0 · 重み1024nice 10 · 重み110nice 19 · 重み15
100%50.0%9.7%1.4%
CPUが余っていれば譲る相手がいないので、タスクBはnice値に関係なくCPUをそのまま使います。
同じコアを奪い合うと、重みが同じnice 0同士はCPU時間を半分ずつ分けます。
nice 10の重みは110で、nice 0(1024)の約9分の1です。CPU時間は約90.3 : 9.7で配分されます。
nice 19の重みは15で、奪い合うときタスクBはCPU時間の約1.4%しか使いません。

重みの表はLinuxカーネルソース[kernel/sched/core.c]の[sched_prio_to_weight]配列で、nice値が1上がるごとにCPU時間が約10%ずつ減るように決められています。

2️⃣ niceの基本的な使い方:数値を省略すると+10、範囲外の値

niceの後ろにコマンドを付けると、そのコマンドのnice値を変えて実行し、コマンドなしで入力すると今のシェルのnice値を出力します。

nice
0

以下の例は、起動したbashが自分のnice値を[ps -o ni=]で出力するコマンドです。-nなしで実行すると今の値に10が足され、-n 5なら5が足されます。

nice bash -c 'ps -o ni= -p $$'
 10
nice -n 5 bash -c 'ps -o ni= -p $$'
  5

範囲を超えた値はエラーなしで端の値に合わせられ、-n 50は19で実行されます。

nice -n 50 bash -c 'ps -o ni= -p $$'
 19

負の値で優先度を上げられるのはrootユーザーだけです。一般ユーザーでは[cannot set niceness]という警告が出力され、コマンドはnice 0のまま実行されます。

# 一般ユーザー
nice -n -5 bash -c 'ps -o ni= -p $$'
nice: cannot set niceness: Permission denied
  0
# rootユーザー
nice -n -5 bash -c 'ps -o ni= -p $$'
 -5

niceで実行したコマンドがさらに起動する子プロセスも、同じnice値で実行されます。

nice -n 7 bash -c 'sleep 1 & ps -o ni= -p $!'
  7

そのため、スクリプトを1つniceで実行すると、その中のコマンド全体が譲ります。

3️⃣ renice:実行中のプロセスのnice値を変更

niceは実行するときにしか値を決めないので、すでに実行中のプロセスはreniceで変更します。まずtopのNI列やpsでPIDと今の値を確認します。

ps -o pid,ni,cmd -p 201643
    PID  NI CMD
 201643   5 sleep 600
renice -n 10 -p 201643
201643 (process ID) old priority 5, new priority 10

出力のとおり、renice -nは今の値に足すのではなく指定した値に合わせるので、5に10を足した15ではなく10になります。エアコンのリモコンの▲ボタンで1段上げるのではなく、設定温度を24度に指定するのと同じです。

util-linuxの公式ドキュメントも-nを絶対値として説明しており、足す方式は新しい版の[--relative]オプションが担います。テストしたutil-linux 2.37.4にはこのオプションがありませんでした。

一般ユーザーは自分のプロセスの値を上げることしかできず、一度上げた値を下げ直すことはできません。

# 一般ユーザー
renice -n 10 -p 201649
201649 (process ID) old priority 0, new priority 10
renice -n 5 -p 201649
renice: failed to set priority for 201649 (process ID): Permission denied

rootユーザーは下げることもでき、同じテストで10を3にそのまま変更できました。

🔲 nice・reniceシミュレーター

一般ユーザーで接続した下のシミュレーターで、niceとreniceを直接入力し、nice値が変わる様子を確認できます。

niceコマンドシミュレーターnice 8.32 · renice 2.37.4
[root@server work]#
ブラウザの中だけで動作し、実際のプロセスには触れません。一般ユーザーで接続した仮想サーバーで、nice値を変えて実行したり、reniceでbackup.sh(PID 2481)の値を変えたりしたあと、ps -o pid,ni,cmdで確認できます。キーボードの↑↓で前に入力したコマンドを呼び出せます。

4️⃣ CPUを奪い合うときの取り分を実測:nice 0 vs 0·10·19

nice値を上げたからといって、そのタスクがいつも遅くなるわけではありません。同じCPUを他のタスクと奪い合うときにだけ取り分が減ります。

CPUコア1つに2つのタスクを割り当て(taskset)、5秒間数を1つずつ数える下のスクリプトを同時に実行しました。数えた数が大きいほど、CPU時間を多く使ったことになります。

#!/bin/bash
end=$((SECONDS+5)); n=0
while [ $SECONDS -lt $end ]; do n=$((n+1)); done
echo $n

スクリプトは5秒が過ぎるまでnを1ずつ増やし、最後の値を出力します。

📊CPUコア1つを奪い合った5秒5秒間に数えた回数
先のタスク nice 0後のタスク
nice 0 vs nice 0
重みが同じ2つのタスク。
025万50万75万100万
nice 0497,596回48.8%
nice 0522,040回51.2%
nice 0 vs nice 10
後のタスクだけnice 10で実行。
025万50万75万100万
nice 0979,971回90.1%
nice 10107,671回9.9%
nice 0 vs nice 19
後のタスクだけnice 19で実行。
025万50万75万100万
nice 0909,895回98.6%
nice 1913,010回1.4%
数値は2026年10月17日にAlmaLinux 9サーバーで、2つのタスクをCPUコア1つに割り当てて同時に5秒ずつ実行した結果です。

nice 0同士は半分ずつ分け、nice 10は約10%、nice 19は1.4%しか使いませんでした。カーネルの重みで計算した比率(1024 : 110は90.3 : 9.7、1024 : 15は98.6 : 1.4)と同じ結果です。

同じコアでnice 19を単独で実行したときは、5秒間に約65万〜114万回数えました。譲る相手がいなければnice 19でもCPUをそのまま使います。テスト中のサーバー負荷(load average)は3〜5でした。

5️⃣ ionice:ディスク側の譲り合いとスケジューラーの確認

niceはCPUの取り分しか決めないので、バックアップのようにディスクを長く読み書きする作業はioniceでディスクの順番も譲ります。-c3(idle)で実行すると、ほかのプログラムがディスクを使っていないときだけ処理されます。

ionice -c3 bash -c 'ionice -p $$'
idle
ionice -p $$
none: prio 0

何も指定していないプロセスは[none]と表示され、カーネルのドキュメントによるとbest-effortクラスとして扱われ、優先度はCPUのnice値から計算されます。

ioniceのクラスはディスクスケジューラーが対応しているときにだけ効果があり、カーネルのドキュメントはbfqとmq-deadlineを対応スケジューラーとして挙げています。角括弧で示されたものが今使われているスケジューラーです。

cat /sys/block/nvme0n1/queue/scheduler
[none] mq-deadline kyber bfq

テストしたサーバーのNVMeディスクは[none]なので、公式ドキュメントによるとioniceを指定しても効果がない場合があり、効果は別途測定していません。ディスク名はlsblkで確認します。

6️⃣ niceを使う場面:バックアップ・cron・wp-cli

時間はかかるが急がない作業にniceを付けます。バックアップの圧縮はCPUとディスクを両方使うので、niceとioniceを一緒に指定します。

nice -n 19 ionice -c3 tar czf backup.tgz /home/example

すでに実行中の作業がサーバーを遅くしているなら、topでPIDを確認してからreniceで値を上げ、毎日実行するcronジョブはコマンドの前にniceを付けます。

0 3 * * * nice -n 10 /usr/local/bin/backup.sh

WordPressサーバーで検索置換や画像の再生成のような大きなwp-cli作業をnice -n 10で実行すると、CPUが忙しいときは訪問者のリクエストを処理するphp-fpmが先にCPUを使います。

nice -n 10 wp media regenerate --yes

反対に、php-fpmやWebサーバー自体にはnice値を上げません。訪問者への応答を処理するプロセスが譲ると、CPUが忙しいときにページの応答が遅くなります。

🔢 FAQ & おすすめコンテンツ

通常のプロセスでは、topのPRは20にnice値を足した値で表示されます。nice 5で実行したプロセスはPR 25、NI 5と表示され、psのPRI列は計算方式が異なるため、同じプロセスが14と表示されました。

niceは指定した値を今のnice値に足します。[nice -n 5 nice -n 3 nice]は8を出力し、指定した値に合わせるrenice -nとは異なる方式です。

サービスのユニットファイルの[Service]セクションに[Nice=]を書くと、そのサービスが実行するプロセスのnice値が決まります。systemd.execの公式ドキュメントによると、-20から19まで指定できます。

🧭 プロセスとジョブ予約のおすすめコンテンツ 記事11・参照4
🗂️ プロセスとジョブ予約
📄 psコマンド 📄 topコマンド 📄 Linux niceコマンド 📄 killコマンド 📄 killallコマンド 📄 バックグラウンド&フォアグラウンド 📄 uptimeコマンド
📄 crontab設定
📋 WP CLI:インストールと設定 📄 WP-Cron(wp-cron.php) 📄 同期パターンを探す:WP-CLI
📡 GNU Coreutils nice invocation 📡 renice(1) Linux manual page 📡 Block io priorities(カーネル文書) 📡 sched_prio_to_weight(カーネルソース)
psコマンドでプロセスを確認
Linux · プロセス
psコマンド(プロセスコマンド)
psコマンドは、現在実行中のプロセスを出力するコマンドです。
記事を見る →現在の記事
Linux TOPコマンド:コマンドラインインターフェース(CLI-Command-Line Interface)
Linux · プロセス
Linuxのtopコマンド(CPU・メモリ使用率の確認)
Linuxのtopコマンドは稼働中のOSの状態を表示するコマンドで、table of processesという意味を持っています。
記事を見る →現在の記事
Linux niceコマンド nice 0とnice 0·10·19がCPUコア1つを5秒間奪い合った実測の棒グラフ
Linux · プロセス
Linux nice コマンド:優先度の指定と renice での変更、CPU を奪い合うときの取り分を実測
Linuxのniceコマンドは、プログラムを実行するときにCPUをどれだけ譲るかを決めるnice値(-20〜19)を指定するコマンドです。
記事を見る →現在の記事
Linuxコマンドラインインターフェース(CLI)
Linux · プロセス
Linuxのkillコマンド[kill -9 PID]
Linuxのkillコマンドは、使用中のプロセスを終了するコマンドです。
記事を見る →現在の記事
Linuxのkillallコマンドのバージョン情報を確認
Linux · プロセス
Linuxのkillallコマンド:インストール、使い方とオプション
Linuxのkillallコマンドは、特定のプロセスを一度に終了させるコマンドです。
記事を見る →現在の記事
Linuxのイメージ
Linux · プロセス
Linuxのバックグラウンド(Back Ground)&フォアグラウンド(Fore Ground):プロセスを制御する
Linuxのプロセスは、バックグラウンド(Back Ground)とフォアグラウンド(Fore Ground)の2つのモードで動作します。
記事を見る →現在の記事
Linuxの基礎(The Linux Foundation)
Linux · サーバー負荷
Linuxのuptimeコマンド(サーバー稼働時間&1・5・15分の平均負荷を確認)
Linuxのuptimeコマンドは、システムの平均負荷とサーバーの稼働時間を確認するコマンドです。
記事を見る →現在の記事

ℹ️ 提携について
当サイトのコンテンツにはアフィリエイトリンクが含まれています。訪問者がこのリンクを通じて商品やサービスを購入すると、当サイトは販売元から手数料を受け取ります。この過程において、購入者が支払う金額(イベント割引適用で金額が下がります↓)は上昇しません。掲載されている価格・割引・在庫情報は作成時点のものであり、実際とは異なる場合がありますので、ご購入前に販売元にて最終確認をお願いいたします。商品の選定および評価は独自の基準に基づいて行われており、手数料の支払いの有無は紹介順や評価内容に影響を与えません。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

人間であることを証明してください: 10   +   5   =