【新卒 / 中途採用】サーバー / クラウドエンジニア 募集中!【大阪】

【新卒 / 中途採用】サーバー / クラウドエンジニア 募集中!【大阪】

【導入実績300社以上】AWS 構築・運用保守サービス

【導入実績300社以上】AWS 構築・運用保守サービス

【ECサイト構築】Shopify カスタムアプリ開発サービス

【ECサイト構築】Shopify カスタムアプリ開発サービス

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【音声アプリ開発】Twilio アプリ開発サービス

【音声アプリ開発】Twilio アプリ開発サービス

【システム開発サービス】SAKARAKU Lab(セカラクラボ)| Webシステム開発

【システム開発サービス】SAKARAKU Lab(セカラクラボ)| Webシステム開発

【取材記事】サーバー系企業ビヨンドが サーバーサイドエンジニアを募集中

【取材記事】サーバー系企業ビヨンドが サーバーサイドエンジニアを募集中

【対談記事】「やっぱクラウド移設っていいですよね」マイネット × ビヨンド エンジニア対談

【対談記事】「やっぱクラウド移設っていいですよね」マイネット × ビヨンド エンジニア対談

ビヨンド公式YouTubeチャンネル「びよまるチャンネル」

ビヨンド公式YouTubeチャンネル「びよまるチャンネル」

『nice』実はこれコマンドなんです。


 

ゲームやアニメをこよなく愛する雑食性オタク、システムソリューション部の一木です。

今回は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権限が必要

最後に

このような拙いブログを最後まで読んでいただきましてありがとうございます。

今後も不定期ではありますが、投稿致しますので宜しくお願い致します。

それでは失礼致します。

 


この記事をかいた人

About the author

一木 爽汰

雑食系のオタクです。
アウトプットが苦手なので、よく変なことを言います。