Linux の nice / renice コマンドを覚えた
毎月15日は自宅サーバのバックアップが実行される日です。バックアップには20時間ほどもかかってしまうわけで、実は15日は凄くレスポンスが低下する日です。ロードは通常時の約3倍の3〜5程度になり、Disk I/O のパフォーマンスが極端に劣化します。
もっともその原因はバックアップの手法が悪いのです。
小さい HDD にバックアップしているために、元々の HDD を tar cvfz 使って圧縮しながらバックアップしているので CPU も凄く喰うんです。こりゃ HDD を増設して差分でバックアップする rsync 方式に変えなきゃ・・・と思いつつ今月もいつもの日が来てしまいました。
さて、今日はいつもにもまして shell での応答が遅いのでプロセスの優先度を変更することにしました。コマンドは覚えてなかったけど優先度設定コマンドがあることは知っていたので調べてみました。
renice - 実行しているプロセスの優先順位を変更する
使い方renice 優先度 [ [ -p ] プロセスID ] [ [ -g ] プロセスグループ ] [ [ -u ] ユーザ ]
説明
renice は動作中のプロセスのスケジューリング優先順位を変更します。複数のプロセスを同時に変更することもできます。優先度は「-20〜19」までの範囲で設定可能で、値が小さいほど優先的に実行されます。設定されている実行優先度を低くする(=優先順位を上げる)ことができるのは root ユーザのみです。下げることができるのはそのプロセスの所有者およびそれ以上の権限を持つユーザです。
who パラメータは、プロセス ID、プロセスグループ ID、ユーザ名のいずれかが指定可能です。プロセスグループを指定するとそのグループに属する全てのプロセスのスケジューリング優先順位が変更されます。ユーザ名を指定するとそのユーザが所有している全てのプロセスのスケジューリング優先順位が変更されます。プロセス ID を指定するとそのプロセスのスケジューリング優先順位が変更されます。
さて、実際に実行してみました。
[root@srv01 ~]# renice --help 使い方: renice 優先度 [ [ -p ] プロセスID ] [ [ -g ] プロセスグループ] [ [ -u ユーザ ] [root@srv01 ~]# ps aux|grep gzip root 4209 13.8 0.0 2748 560 ? S 03:05 114:12 gzip root 29968 0.0 0.0 53332 748 pts/0 R+ 16:49 0:00 grep gzip renice 19 -p 4209 [ [ -p ] プロセスID ] [ [ -g ] プロセスグループ] [ [ -u ユーザ ] [root@srv01 ~]# renice 19 -p 4209 4209: 古い優先度は 0、新たな優先度は 19 です [root@srv01 ~]# ps aux|grep gzip root 4209 13.8 0.0 2748 560 ? SN 03:05 114:17 gzip root 30030 0.0 0.0 53336 772 pts/0 S+ 16:50 0:00 grep gzip
nice 値を変更するとコマンド名の由来通りサーバのスケジューリングがナイスな感じで gzip が他のプロセスより優先順位が低く実行されているのが top で判別できます。これで CGI のレスポンスの低下を防ぐことが可能になります。gzip が上位に張り付いていたのが下の方に行きました。
nice - スケジュール優先度を変更してプログラムを実行する
使い方
nice [-n adjustment ] [COMMAND [ARG]...]
説明
引数なしで実行すると nice は現ユーザのスケジューリング優先度を表示します。引数に実行するコマンドを指定した場合は、スケジューリング優先度を調整してから与えられたコマンドを実行します。
優先度は「-20〜19」までの範囲で設定可能で、値が小さいほど優先的に実行されます。優先度パラメータが無い場合には優先度 10 で実行されます。負の値の優先度を与えることが可能なのは root ユーザのみです。
と言うわけで、バックアッププログラムを実行する cron をこんな感じで設定するとコレからはよさげです。
5 3 15 * * nice -n 19 backup.sh
コマンドを調べる時に参考になったサイトはこちらです。まだまだ日々精進が必要です。。。(;´д`)ゞ
- Japan.internet.com LinuxTutorial - Linuxを使いこなそう――ジョブ制御の基本--1
- Manpage of RENICE
- Manpage of NICE
- nice値を変える - うるめねっと技研 - Linux派 -
- ほえほえ LinuxファイルI/Oチューニング
コメントやシェアをお願いします!
fujiyama
こんにちは、
Linuxを勉強してます。fujiyamaと申します。
優先度の変更方法を調べて手貴方様に辿り着きました。
優先度を変更したいプロセスは"/home/user/test"とします。
私の"/etc/crontab"は以下の様になってます。
00 00 * * * root shutdown -r now
05 00 * * * root /home/user/test
そして以下の様に編集したら正常に動作します?
00 00 * * * root shutdown -r now
05 00 * * * root /home/user/test
10 00 * * * root nice -n 19 /home/user/test
お時間に空き出来たら回答して頂けると幸いです。