『nice』実はこれコマンドなんです。
ゲームやアニメをこよなく愛する雑食性オタク、システムソリューション部のinusukiです。
今回はUNIX系OS(Linuxなど)で使われる「nice」コマンドについてブログを書くなりします。
niceコマンドについて
niceコマンドとはプロセスの相対優先度を変更して実行するコマンドです。
似たようなコマンドで「renice」コマンドがありますが、こちらは実行中のものを変更します(書式も若干違います)
※今回は混同を避けるため、敢えて取り上げていないです。
優先度&オプションまとめ
優先度について
優先度(nice値)は-20から19の値で調整でき、
マイナスに行くほど優先度が高くなり、プラスに行くほど優先度が低くなります(どうして…)
尚、優先度を高くするにはroot権限が必要になります。
優先度 | 値 | 備考 |
高 | -20 | rootユーザでのみ変更可能 |
↕ | 0 | 初期値 |
低 | 19 | rootユーザ、一般ユーザで変更が可能 |
オプションについて
niceコマンドのオプションはこちらです!
オプション | 説明 |
-【値】 | 優先度を指定した値、増減させる |
-n【値】 | 優先度を指定した値、増減させる (※値を指定しなかった場合、 デフォルトで10が適用されます) |
--adjustment=【値】 | |
--help | ヘルプを表示 |
--version | バージョンを表示 |
…はい!なんか色々とありますが、基本的に「-n【値】」を覚えていたらOKです。
(※明示的に指定してあげないとデフォルト値(+10)が指定されるので注意しましょう~)
例えば、beyond.shというスクリプトを優先度を-5して実行したい場合は下記のような書式になります。
# nice -n -5 /opt/beyond.sh
他プロセスと比較してみると優先度(NI)が-5されて実行されていることが確認できます。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2818 root 15 -5 13004 1416 1208 S 0.0 0.3 0:00.05 /bin/bash /opt/beyond.sh
nice値の確認方法
確認方法(一例)
現在実行されているプロセスの相対優先度(NI)は ps -l とか top -c とかで確認することができますよ。
ps -l
# ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 2526 2503 0 80 0 - 35262 poll_s pts/0 00:00:00 sudo 4 S 0 2528 2526 0 80 0 - 22938 do_wai pts/0 00:00:00 su 4 S 0 2529 2528 0 80 0 - 3946 do_wai pts/0 00:00:00 bash 0 R 0 3315 2529 0 80 0 - 13267 - pts/0 00:00:00 ps
top -c
#top -c PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 571 root 20 0 474024 17456 6156 S 0.0 3.5 0:05.50 /usr/bin/python2 -Es /usr/sbin/tuned -l -P 341 polkitd 20 0 613016 9184 5076 S 0.0 1.8 0:00.20 /usr/lib/polkit-1/polkitd --no-debug 1474 root 20 0 447996 8968 6708 S 0.0 1.8 0:01.16 /usr/sbin/NetworkManager --no-daemon 1 root 20 0 127992 6612 4128 S 0.0 1.3 0:03.88 /usr/lib/systemd/systemd --switched-root --system --deserialize 21 1499 root 20 0 102904 5512 3456 S 0.0 1.1 0:00.02 /sbin/dhclient -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-eth0.pid -lf /var/lib/NetworkManager/dhclient-+ 2818 root 15 -5 13004 1416 1208 S 0.0 0.3 0:00.05 /bin/bash /opt/beyond.sh
変更するメリット
明示的に優先度を指定してあげることで、他の優先度が高いプロセスにCPUリソースを割くことができます~
つまり、相対的にCPUに対する負荷を抑えることができるということ(らしい)です!
……むむむ、と言われてもよくわからないですね。
人間的に言えば、忙しい中で重要な仕事を振られるか、割とゆとりのある仕事を振られるか、だと思います。
前者のような仕事振られても手に負えないですし、スケジュールを組み直すのも大変ですよね。
優先度を決められた仕事を割り振られた方が、他の仕事と並行してもスムーズに処理できると思います。
CPUもそういうことです(伝わるといいな)
どんな時に使う?
さて、このniceコマンドいつ使うのでしょうか?
いくつかの使いどころをPickupしてきました!
- mysqldumpで大量のデータをエクスポートする場面
- 事後調査の為に大量のログから正規表現でgrepする時
- 重めのバッチ処理を流す時
などなど……
緊急度が低く、且つ重めな処理を他プロセスの処理を引っ張ることなく通したい場合とかに使えます!
どの辺りがniceなの?
さてさて、ここまでniceコマンドについて色々調べてみましたが、
このniceコマンド、どの辺りがniceなんでしょうか……?
(わたし、気になります!)
という物好きな方もいらっしゃるかと思いますので、コラムとしてここに残しておきます。
niceコマンドの由来について調べてみた!
調べてみたところ諸説ありましたが、
「他のユーザの為に自ら優先度を下げるなんて優しいんだ!」
「CPUを労わってあげるなんて...あなたは優しいですね。」という
どうやら親切度やそのユーザへの称賛を表したコマンドのようです。
(優先度を低くすることで値がプラスになるのもその為だとか……知りませんでした。)
まとめ
今回の内容について簡潔にまとめるとこんな感じです。
- 基本的な書式は nice -n【値】
- 優先度を変更して実行でき、CPUへの負荷を抑えられる
- マイナスになると高く、プラスになると優先度は低くなる(nice値:-20~19)
- 優先度の引き上げにはroot権限が必要
最後に
このような拙いブログを最後まで読んでいただきましてありがとうございます。
今後も不定期ではありますが、投稿致しますので宜しくお願い致します。
それでは失礼致します。