2010年6月25日

[PHP-users 35260] Re:php cli版での常駐プログラムとメモリ開放について

木内様, わきた様, MugeSo様, 重松様,

みなさま色々ありがとうございます。増田です。

早速試してみました。結論から言いますと現状問題なくうまくいっております。

>ループをフォーク後子プロセスのみで行っては如何でしょうか?
>無限ループ内の頭にてforkしているのが原因ではないでしょうか?

ということで、子プロセスの処理のところに、whileを起き、ループさせてみました。

# ps aux |grep php
root 18628 0.0 1.0 163340 11280 pts/1 S 17:09 0:00
/usr/bin/php /root/test/loop.php
root 18631 0.0 0.8 163344 8348 pts/1 S 17:09 0:00
/usr/bin/php /root/test/loop.php

#cat /proc/18628/status
VmHWM: 11280 kB
VmRSS: 11280 kB
VmData: 4900 kB

#cat /proc/18631/status
VmHWM: 8352 kB
VmRSS: 8348 kB
VmData: 4904 kB

こちらは常に同じプロセスが常駐していて、特にメモリも消費されることなく、安定して動いています。
cronなどで定期チェックは必要でしょうが、問題なく動いております。

>子プロセスの最後で exit していないのが原因では?
# ps aux |grep php
root 20420 0.0 1.0 163340 11288 pts/1 S 17:32 0:00
/usr/bin/php /root/test/loop.php
root 20453 0.0 0.7 163344 8052 pts/1 S 17:33 0:00
/usr/bin/php /root/test/loop.php

# cat /proc/20420/status
VmHWM: 11288 kB
VmRSS: 11288 kB
VmData: 4900 kB

こちらは、2つ目のプロセスがひたすら生成されていくのですね。
最初の方法とどちらが望ましいのか分からないのですが、現状こちらも問題なく動きました。

前は子プロセスが終わった「あと」にexitしたら、どうも思うように動かなかったので、
終了直前にexitすればよかったんですね。


> 斜め読みしただけですけど、普通は子プロセスに上限を設けて、無限に子供が増えない対策をしたり、上記に書かれているように graceful restart に対応したり、そういうことが求められると思うんですが、現状全く考慮されていないように見えます。

おっしゃるように本来はプロセス数に上限設けたり、そういう処置を施さないと、長期的に常駐させたときにどうなるか分かりませんし、まだ数十分の検証ですので、
何ともいえませんが、もう少し長い時間動かしてみて、様子を見てみます。

みなさま色々とご助言いただき本当にありがとうございました。
また何かありましたらご連絡させていただきます。


増田
--
mailto:masuken@xxxxx
_______________________________________________
PHP-users mailing list PHP-users@xxxxx
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3


投稿者 xml-rpc : 2010年6月25日 18:06
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/96674
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。