[PHP-users 35260] Re: php cli版での常駐プログラムとメモリ開放について
Masuda
masuken @ gmail.com
2010年 6月 25日 (金) 18:06:04 JST
木内様, わきた様, 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 @ gmail.com
PHP-users メーリングリストの案内