Hatena::Groupfreebsd

peanutsjamjamのFreeBSD日記 このページをアンテナに追加 RSSフィード

2006-03-30

portsdb, renice portsdb, renice - peanutsjamjamのFreeBSD日記 を含むブックマーク はてなブックマーク - portsdb, renice - peanutsjamjamのFreeBSD日記 portsdb, renice - peanutsjamjamのFreeBSD日記 のブックマークコメント

portsdb -Uu が重い

ports tree を cvsup したので、portsdb -Uu した。portsdb -Uu というものが実際に何をしているのかは知らないけれど、とにかく ports tree を更新した後は、それをやるべきである、ということになっているらしい。

ところが、私の PC ではこれがメチャ重い。portsdb -Uu の処理が CPU を使いまくってしまい、Firefox でのブラウジングとか、vi でのコーディング等も重く、遅く感じられるのだ。何をしているのか知らないが、裏でこっそりとやって欲しいものである。

「ああ、優先度を下げて実行すればよかったなぁ」と、後悔した。

優先度を下げて実行する、とは、実際にこういうコマンドを打つことである。*1

# nice +20 portsdb -Uu

これをやらなかったので後悔したのである。

renice

そこで、renice の登場である。

renice は、既に実行中のプロセスの優先度を変更することができる優れものコマンドだ。

まず、どのプロセスの優先度を下げたいのか、プロセス番号を知る必要がある。ところが、portsdb -Uu という処理は、たぶん、きっと、複数の子プロセスを次々と起動したりしているのだろうから、そういうものも含めて全部優先度を下げたい。なので、ここでは、プロセスグループ ID を指定することで、まとめて優先度を下げてやる。

ps コマンドを使って、親プロセス IDプロセス IDプロセスグループ ID、NICE 値、コマンド、の 5 つの情報を表示させてみる。

# ps o "ppid pid pgid nice command"
 PPID   PID  PGID NI COMMAND
    (略)
 7574  7577  7577  0 /usr/local/bin/ruby18 /usr/local/sbin/portsdb -Uu
 7577  7642  7577  0 sh -c cd /usr/ports && make INDEXFILE=INDEX.tmp index && mv INDEX.tmp /tm
 7642  7643  7577  0 make INDEXFILE=INDEX.tmp index
 7643  7661  7577  0 /bin/sh -ec cd /usr/ports && make /usr/ports/INDEX.tmp
 7661  7662  7577  0 make /usr/ports/INDEX.tmp
 7662  7668  7577  0 [sh]
 7668  7670  7577  0 make -j2 INDEX_TMPDIR=/tmp/index.KM7PdnyS BUILDING_INDEX=1 ECHO_MSG=echo 
 7670 89788  7577  0 sh -ev
89788 89789  7577  0 make -B _x11-fonts.describe
89789 89795  7577  0 [sh]
89795 89796  7577  0 make -B describe DIRPRFX=x11-fonts/
89796 89802  7577  0 [sh]
 7670 89979  7577  0 sh -ev
89979 89980  7577  0 make -B _x11-servers.describe
89980 89986  7577  0 [sh]
89986 89987  7577  0 make -B describe DIRPRFX=x11-servers/
89987 89993  7577  0 [sh]
89802 90198  7577  0 make -B describe
89993 90203  7577  0 make -B describe
    (略)
89420 90205 90205  0 ps o ppid pid pgid nice command

あまりにも長いので略したが、portsdb -Uu の「プロセス ID」は 7577 。そして、このプロセスがつくり出した子プロセスたちのプロセスグループ ID も 7577 だということがわかった。(たまたま同じなのか、そういうことになっているのかはよく知らん)。NI のところが 0 になってるので、ほかのプロセスと同じ、普通の優先度で実行されている事もわかる。

この、7577 という「プロセスグループ ID」を持つ、全てのプロセスの優先度を下げてやろう。優先度を下げるということはすなわち、nice 値を大きくしてやるということだ。

# renice 20 -g 7577

これで、とても重かった PC がとても軽くなった。

*1:nice コマンドはシェルのビルトインコマンドになっている事もあるので注意。nice(1) だけでなく、お使いの shell の man page も御覧ください。

トラックバック - http://freebsd.g.hatena.ne.jp/peanutsjamjam/20060330