[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 メーリングリストの案内