funayama
2015年2月28日 14時47分
お世話になっております。
実行中にプロセス優先度を変更する場合、
reniceコマンドを使用できますでしょうか。
また、実際に
renice +10
でプロセス優先度を下げておりますが、
実際に下がっていないような気がしています。
psコマンドでは優先度の確認ができないようです。
確認する方法をご教授下さい。
よろしくお願いいたします。
コメント
funayama
y.nakamura
中村です。
> コマンドによってプロセスのnice値を変更できないものはありますか。
> 具体的に、ftp,find,及びUserProgramでは問題なく変更できますか。
> UserProgramが起動されたらftp,findの優先レベルを下げたいのですが...。
> どうもうまく確認できません。
ftpはポート21に接続があったときに、その都度、inetdから起動されます。
ですのでftpの優先順位を下げようとするなら、inetdの方を変更すれば
いいのではないでしょうか?
nice値は親プロセスの値を継承することになってますので。
findは・・・・シェルスクリプトから何かしたいときに起動されるのですよね?
UserProgramが起動しているときにあとからfindを起動するなら、
niceコマンドでnice値を指定してfindを起動するようにすれば
いいのではないでしょうか?
と、ここまで書いて、A400にniceあったかな?と試してみたら、
not foundと言われてしまいました。
ftpとinetdの関係と同じように、findを使っているプログラム(
シェルスクリプトかな?)のnice値を変えてしまえば、そこから
起動するfindのnice値もかわるのでは?
UserProgramが起動する前から動いているfindがあって、
(何を探すのかわかりませんけど、そんなに長い時間ずっと
動いているfindがいるのでしょうか?)、それのnice値を
変えたいなら、やっぱりreniceコマンドだと思いますよ。
なんかピント外れな返事を書いているかもしれません。
だったら申し訳ないです。
--
なかむら
funayama
中村さん
お世話様です。
コメントありがとうございます。
> findは・・・・シェルスクリプトから何かしたいときに起動されるのですよね?
> UserProgramが起動しているときにあとからfindを起動するなら、
> niceコマンドでnice値を指定してfindを起動するようにすれば
> いいのではないでしょうか?
まさにこの場合に当てはまります。
現在、inetdでは修正が入っていません。
UserProgram起動後、シェルの方でfindが起動され、
UserProgramがこれまでに生成したUSBメモリ内の
画像ファイル(数万個)を検索しに行きます。
その後で画像があればftpでサーバーに転送します。
ここで問題となっているのは、ftpでは問題ないのですが、
findが起動されるとUserProgramの動きがとたんに
遅くなってしまいます。
reniceコマンドでfind実行前にnice値を下げるように
設定していますが(renice +10 $$)ftpしか有効に
ならないようなのです。
nice値はfindも+10に下げられているようなのですが...。
どこに問題があるのでしょうか。
ご教授下さい。
よろしくお願いいたします。
y.nakamura
中村です。
だいたいの状況は理解できました。
前の投稿でftpをサーバ側と思い込んで書いていましたが、
クライアント側だったのですね。すみません。
> reniceコマンドでfind実行前にnice値を下げるように
> 設定していますが(renice +10 $$)ftpしか有効に
> ならないようなのです。
シェル自身(上の引用の$$がそういうことですよね)の優先順位を変えて
findを実行したときのfindのnice値を調べてみましたが、試した範囲では
ちゃんと変わっていました。
次のようにして調べました。
毎回pidを調べて/proc/[pid]/statを表示させ、nice値の値を
確認するのが面倒なので、次のスクリプトを用意。
これを"a"とします。
(findコマンドが2つ以上あっても大丈夫なようにしてあります)
#!/bin/sh pids=`ps | grep find | grep -v grep | awk '{print $1}'` if [ "$pids" = "" ]; then echo "find command not found." exit fi for pid in $pids do cmdline=`strings -n 1 /proc/$pid/cmdline` nice=`awk '{print $19}' /proc/$pid/stat` echo pid=$pid nice=$nice cmdline=[$cmdline] done
findは、時間がかかる"/"からの表示にします。
端末を2つ用意し、一方の端末で
# find /
この実行が終わらないうちに別の端末で
# /a
pid=4462 nice=0 cmdline=[find /]
findを実行した端末で(前のfindが終わったあと)
# renice 10 $$
1364: old priority 0, new priority 10
# find /
別の端末で
# ./a
pid=4481 nice=10 cmdline=[find /]
このように、findのnice値が10に代わっています。
--
なかむら
funayama
y.nakamura
2015年2月28日 15時42分
中村です。
> renice +10
> でプロセス優先度を下げておりますが、
> 実際に下がっていないような気がしています。
> psコマンドでは優先度の確認ができないようです。
> 確認する方法をご教授下さい。
Armadilloのpsやtopでは確認できないみたいです。
/proc/[pid]statで表示してくれます。
http://linuxjm.sourceforge.jp/html/LDP_man-pages/man5/proc.5.html
の/proc/[pid]/statの説明の中の
(18) priority %ld
と
(19) nice %ld
実際にA420でやってみると...
(表示のコピペで80桁で改行を入れてます)
右の方にある"1297"の3個左がnice値のようです。
--
なかむら