Linux の nice / renice コマンドを覚えた

毎月15日は自宅サーバのバックアップが実行される日です。バックアップには20時間ほどもかかってしまうわけで、実は15日は凄くレスポンスが低下する日です。ロードは通常時の約3倍の3〜5程度になり、Disk I/O のパフォーマンスが極端に劣化します。

la-day.png

disk_io-day.png

もっともその原因はバックアップの手法が悪いのです。
小さい 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 が上位に張り付いていたのが下の方に行きました。

img01.jpg

nice - スケジュール優先度を変更してプログラムを実行する

使い方
nice [-n adjustment ] [COMMAND [ARG]...]

説明
引数なしで実行すると nice は現ユーザのスケジューリング優先度を表示します。引数に実行するコマンドを指定した場合は、スケジューリング優先度を調整してから与えられたコマンドを実行します。

優先度は「-20〜19」までの範囲で設定可能で、値が小さいほど優先的に実行されます。優先度パラメータが無い場合には優先度 10 で実行されます。負の値の優先度を与えることが可能なのは root ユーザのみです。

と言うわけで、バックアッププログラムを実行する cron をこんな感じで設定するとコレからはよさげです。

5 3 15 * *  nice -n 19 backup.sh


コマンドを調べる時に参考になったサイトはこちらです。まだまだ日々精進が必要です。。。(;´д`)ゞ

- スポンサーリンク -

関連する記事&スポンサーリンク