Linuxサーバーが重い時に必須!niceコマンドでプロセス優先度を完璧に調整する方法

概要

サーバーリソースが逼迫した環境でバックグラウンドジョブや負荷の高いバッチスクリプトが実行されると、コアサービスの応答速度が低下する恐れがあります。本記事では、niceおよびreniceコマンドを活用してCPUスケジューリングの優先度を設定し、システムの安定性を維持する実践的なTipsを紹介します。

1. プロセス優先度(NI/PR)の確認とhtopモニタリング環境の構築

プロセス優先度のモニタリング演習のため、必須ツールである htop および procps パッケージをインストールします。

apt-get update -qq && apt-get install -y htop procps

ps コマンドは、現在システムで実行中のプロセスの詳細情報と優先度値を確認します。
出力結果において、NI はユーザーが調整可能な nice 値であり、PRI はカーネルスケジューラが実際に割り当てた優先度を表します。
⚙️ [主なオプション]

-e : システムで実行中のすべてのプロセスを選択して表示します。
-o : 出力するカラム項目(pid、ni、pri、comm など)をユーザー定義のフォーマットで設定します。
-u : 特定のユーザーが所有するプロセスのみをフィルタリングして出力します。
-p : 指定した特定のPID(プロセスID)に該当するプロセスのみを取得します。
-f : プロセスの完全な詳細情報を含むフルフォーマットリストを出力します。

ps -eo pid,ni,pri,comm | head -n 15

2. niceコマンドで低優先度のバックグラウンドジョブを実行する

実習に必要なテストファイルを安全に作成・管理するために、一時作業ディレクトリを作成してその場所に移動します。

mkdir -p /tmp/nice_demo && cd /tmp/nice_demo

nice コマンドで nice 値を 10 に指定し、CPUリソースの占有率を譲るよう優先度を下げた状態で、大容量ファイル作成タスクをバックグラウンド(&)で実行します。

nice -n 10 dd if=/dev/urandom of=/tmp/nice_demo/sample.dat bs=1M count=100 &

ps コマンドと grep を組み合わせて、実行中の dd プロセスのPIDとともに、実際に反映された nice 値(NI)が意図通りに設定されているか確認します。

ps -eo pid,ni,comm | grep dd

3. reniceコマンドで実行中プロセスの優先度をリアルタイムに変更

リアルタイムな優先度変更の実習のため、300秒間待機する sleep プロセスをバックグラウンド(&)で実行します。

sleep 300 &

直前にバックグラウンドで実行したプロセスのID(PID)を表す特殊変数 $! を活用して、環境変数 TARGET_PID に保存します。

TARGET_PID=$!

ps コマンドで対象プロセスの現在の nice 値(NI)を確認すると、デフォルト値である 0 で動作していることがわかります。

ps -p $TARGET_PID -o pid,ni,comm

renice コマンドを使用して、すでに実行中の対象プロセスの nice 値を 15 に変更し、優先度を下げます。
出力結果から、従来の優先度(old priority 0)が新しい優先度(new priority 15)に正常に変更されたことを確認できます。

renice 15 -p $TARGET_PID

ps コマンドで対象プロセスを再度確認し、nice 値(NI)が 15 に即座に反映されたかを検証します。

ps -p $TARGET_PID -o pid,ni,comm

実習が完了したテストプロセスを強制終了(kill -9)し、システムリソースを解放します。

kill -9 $TARGET_PID

4. root権限による高優先度(負のnice値)の割り当てと注意点

一般ユーザーでは設定できない負の nice 値(-5)を適用するため、sudo 管理者権限を使用して優先度を上げたプロセスをバックグラウンド(&)で実行します。
負の nice 値が割り当てられたプロセスは、CPUスケジューリング時により高い実行優先度を持つため、システムリソースを集中的に割り当てられます。

sudo nice -n -5 bash -c ’echo “High priority process running” && sleep 5’ &

ps コマンドで実行中のプロセスを確認し、対象プロセス(sleep)の nice 値(NI)が -5 に正常に反映されているか確認します。
出力結果から、通常のデフォルトプロセス(0)とは異なり、負の nice 値(-5)が設定されて高い優先度で動作していることが確認できます。

ps -eo pid,ni,comm | grep -E ‘sleep|bash’ | tail -n 5

ここまで、Linuxサーバーの動作が重い・もたつく時に役立つ nice コマンドを用いたプロセス優先度の調整方法について解説しました。
サーバーリソースが不足している際は、状況に応じた優先度を指定することで、システムをより安定的かつ快適に運用してみてください。