[PHP-users 34767] Re: sleep関数が復帰せずプロセスがダウンする

View: New views
12 Messages — Rating Filter:   Alert me  

Parent Message unknown [PHP-users 34767] Re: sleep関数が復帰せずプロセスがダウンする

by Yuji KUBOTA :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

北村さま

この度はお世話になります。久保田と申します。

> Date: Wed, 16 Sep 2009 03:15:45 +0900
> From: Eijun Kitamura <eijun@...>
> Subject: [PHP-users 34765] Re: sleep関数が復帰せずプロセスがダウンする
> To: PHP-users ML <php-users@...>
> Message-ID: <4AAFD9D1.90807@...>
> Content-Type: text/plain; charset=ISO-2022-JP
>
> 北村と申します。
>
> 若葉とか初心者とか名乗っても叩かれない、良い時代になりました。
>
> さて、本題ですが、
>
> Test_Sleep.phpの
>
>> while($loop_condition){
>
> は無限ループになっているように思いますが、これは意図的なものですか?
はい。そうです。
定期的に処理を実行するプログラムをプロセスとして常駐化させ利用したと考えています。

> ログファイルが異常に大きくなってしまったとか。
今回作成されたログファイルのサイズは399KBでした。
このサイズよりも大きなログファイルを扱った事があるのでプロセスダウンの原因とは考
えられないと思います。(HDD容量にも問題なし)

> あと、exec()の戻り値や標準エラーを取得すると、何か出てきませんか?
確認してみます。少々お時間を下さい。

なお、[PHP-users 34766]に記載させて頂きましたが、異なる環境で動作させて結果、プ
ロセスダウンが発生しておりません。

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

[PHP-users 34768] Re: sleep関数が復帰せずプロセスがダウンする

by h-taguchi :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

的を外したものです。

> はい。そうです。
> 定期的に処理を実行するプログラムをプロセスとして常駐化させ利用したと考えています。

レンタルサーバーとか厳しい制約があるんでしたっけ。
常駐化なら、やはり常駐プロセスとしてプログラムを
作成するのが正攻法だと思います。

お力になれず、すみません。

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

[PHP-users 34769] Re: sleep関数が復帰せずプロセスがダウンする

by Eijun Kitamura :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

久保田さん:

北村です。

> 定期的に処理を実行するプログラムをプロセスとして常駐化させ利用したと考えています。

ということは、

こういうのとか、
http://labs.pakureserve.jp/archives/34
こういうのとか、
http://blog.bz2.jp/archives/2008/05/1php.html
こういうのは、
http://ml.php.gr.jp/pipermail/php-users/2005-March/025513.html

考える方向性としては近くないですか。

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

[PHP-users 34771] Re: sleep関数が復帰せずプロセスがダウンする

by Yuji KUBOTA :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

田口様

この度はお世話になります。久保田と申します。

> 的を外したものです。
>
>> はい。そうです。
>> 定期的に処理を実行するプログラムをプロセスとして常駐化させ利用したと考えています。
>
> レンタルサーバーとか厳しい制約があるんでしたっけ。
自己運営サーバーなので基本的にはサーバーに関する制限はなしです。
開発環境としてPHPで統一しておきたいと言う理由です。

> 常駐化なら、やはり常駐プロセスとしてプログラムを
> 作成するのが正攻法だと思います。
そのように見直すべきかとも考え始めております。
それにしても、なぜプロセスがダウンするかの原因は明確にしておきたいと考えています。

> お力になれず、すみません。
いいえ。コメントを頂き感謝しております。
_______________________________________________
PHP-users mailing list  PHP-users@...
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3

[PHP-users 34772] Re: sleep関数が復帰せずプロセスがダウンする

by Yuji KUBOTA :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

田口さま

この度はお世話になります。久保田と申します。

コメントを頂き感謝申し上げます。

> 久保田さん:
>
> 北村です。
>
>> 定期的に処理を実行するプログラムをプロセスとして常駐化させ利用したと考えています。
>
> ということは、
>
> こういうのとか、
> http://labs.pakureserve.jp/archives/34
> こういうのとか、
> http://blog.bz2.jp/archives/2008/05/1php.html
> こういうのは、
> http://ml.php.gr.jp/pipermail/php-users/2005-March/025513.html
昨晩、一番最初のサイトに関してちょっと動作確認を行っておりました。
上記のサイトを参考にさせて頂きます。

> 考える方向性としては近くないですか。
近いです。
定期起動をsleep関数を利用しないでどのように実現するかを検討したいと思います。
_______________________________________________
PHP-users mailing list  PHP-users@...
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3

[PHP-users 34774] Re: sleep関数が復帰せずプロセスがダウンする

by HOTTA Michihide :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

堀田@長崎市です。

On Thu, 17 Sep 2009 10:10:35 +0900
Yuji KUBOTA <kubota.yuji@...> wrote:
Subject: [PHP-users 34771] Re: sleep関数が復帰せずプロセスがダウンする

> >> 定期的に処理を実行するプログラムをプロセスとして常駐化させ
> >> 利用したと考えています。
> >
> > レンタルサーバーとか厳しい制約があるんでしたっけ。
> 自己運営サーバーなので基本的にはサーバーに関する制限はなしです。
> 開発環境としてPHPで統一しておきたいと言う理由です。

参考になるかどうかはわかりませんが、私の職場(大学)では多数の
バッチ処理を php CLI で運用しています。一例を挙げると

root@gtr:~# cat /var/spool/cron/phpuser
(略)
#--------------------------------------------------------------------------
# 入退室状況表示対象研究室ステータスの取得
#--------------------------------------------------------------------------
*/1 * * * * $HOME/lc_view/progs/get_roomstat.php
#--------------------------------------------------------------------------
# 情報演習室におけるログイン状況の取得
#--------------------------------------------------------------------------
*/5 * * * * $HOME/get_smbstatus.sh >> /tmp/get_smbstatus.log >&/dev/null
#--------------------------------------------------------------------------
# 年次更新
#--------------------------------------------------------------------------
0 0 1 4 * $HOME/lc_view/progs/annual_update.php

それぞれ1分間に1回、5分間に1回、年に一回の処理です。

スクリプトの中身はいろいろ(オラクルやポスグレにアクセスしたり、
ssh 経由でいろんなサーバを巡回したり、メールを送ったり)ですが、
いずれにせよ、処理が終わったら単に終了すればいい(非常駐型)ので
プログラムが単純になり、保守性も向上します。Web アプリじゃないの
でセッションなどの状態遷移も意識する必要がない分、可読性もよく、
ブラウザも不要です。昔の COBOL の感覚です。

cron とシェルの使い方を覚えれば、いろいろと応用が利きますよ。

独立した処理を連続してやりたければ、複数の php スクリプトをまと
めて実行するシェルスクリプト(上記の get_smbstatus.shがそれ)を
作って cron に登録する、などという具合です。

エンドユーザに見せたい画面だけを Web アプリとして開発し、参照す
る DB の中身は CLI が生成/更新する、という使い方が多いです。

> > 常駐化なら、やはり常駐プロセスとしてプログラムを
> > 作成するのが正攻法だと思います。
> そのように見直すべきかとも考え始めております。
> それにしても、なぜプロセスがダウンするかの原因は明確にして
> おきたいと考えています。

もし対象が制御系だったり、監視系(インターバルが1分以内)だった
りする場合は、常駐型にならざるを得ないかもしれません。その場合で
も CLI ならデバッグも楽だし、apache の介在がなくなるので、原因の
絞り込みも少しは楽になるかもです。

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

[PHP-users 34775] Re: sleep関数が復帰せずプロセスがダウンする

by MAEDA Katsuyuki :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

 前田です。

 同じ環境を作れないので、確認できないのですが、Apache自身の
workerプロセスが終了するときに、シグナルが飛んできて一緒に
終了しているのでは無いですか?
 MaxRequestsPerChild の設定に依存しますが、デフォルト値は
10000となっており、10000リクエスト毎にサーバープロセスは
終了します。
 pcntl_signalで、シグナルハンドラ設定してログを書かせてみれば
判断できると思います。

 飛んでくるシグナルを無視することで、プロセスが終了することは
なくなりますが、もし、子プロセスが長期間待機する性質のもので
あれば、CLI等で作ったデーモンプロセスを用意するほうがベター
だと思います。
 複数の異なるかも知れない親からforkされるプロセス群を安全に
管理するのは大変変だからです。

 シグナルを無視するようにしたとして、Apache自体を再起動した
際に、各々の子プロセスの後始末をきれいにやったり、安全な排他
処理を用意したりするのは気を使います。

--
MAEDA 'kei' Katsuyukii <maeda.katsuyuki@...>
「終わらないプロジェクトはない。終わっちゃうプロジェクトはあるけど。」
_______________________________________________
PHP-users mailing list  PHP-users@...
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3

[PHP-users 34776] Re: sleep関数が復帰せずプロセスがダウンする

by Mashiki :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

 Mashikiです。

>>> 定期的に処理を実行するプログラムをプロセスとして常駐化させ利用したと考えて
>>> います。
  :
>自己運営サーバーなので基本的にはサーバーに関する制限はなしです。
>開発環境としてPHPで統一しておきたいと言う理由です。
  :
>> 常駐化なら、やはり常駐プロセスとしてプログラムを
>> 作成するのが正攻法だと思います。
>そのように見直すべきかとも考え始めております。

>それにしても、なぜプロセスがダウンするかの原因は明確にしておきたいと考えてい
>ます。

前田さんのapacheプロセスの終了が怪しそうですね。

apache経由でなく、コマンドラインから実行して再現しないのであれば、

--- Test_CreateSleepProc.php ---
<?php
   exec("echo 'php -f Test_Sleep.php > /dev/null' | at now");
?>

でいけそうな気がします。


ところで、なぜ常駐させたいのか語られていないのですが、
自分だったら可能な限り常駐は避けます。

 php自身、利用しているモジュールやライブラリ、自分で書いた
プログラムのすべてについて、メモリリークがないことを保障するのは
難しいので、60回だけループして終了するようなプログラムにして、
それをcronで10分置きに起動するとかを選択するでしょうね。

ブラウザから開始/終了したいのであれば、apache側プログラムは
設定ファイルにフラグをセットするだけにするとか...。
_______________________________________________
PHP-users mailing list  PHP-users@...
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3

[PHP-users 34777] Re: sleep関数が復帰せずプロセスがダウンする

by Yuji KUBOTA :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Mashikiさま

この度はお世話になります。久保田と申します。

>  Mashikiです。
>
>>>> 定期的に処理を実行するプログラムをプロセスとして常駐化させ利用したと考えて
>>>> います。
>   :
>> 自己運営サーバーなので基本的にはサーバーに関する制限はなしです。
>> 開発環境としてPHPで統一しておきたいと言う理由です。
>   :
>>> 常駐化なら、やはり常駐プロセスとしてプログラムを
>>> 作成するのが正攻法だと思います。
>> そのように見直すべきかとも考え始めております。
>
>> それにしても、なぜプロセスがダウンするかの原因は明確にしておきたいと考えてい
>> ます。
>
> 前田さんのapacheプロセスの終了が怪しそうですね。
>
> apache経由でなく、コマンドラインから実行して再現しないのであれば、
>
> --- Test_CreateSleepProc.php ---
> <?php
>    exec("echo 'php -f Test_Sleep.php > /dev/null' | at now");
> ?>
>
> でいけそうな気がします。
上記コメントを検討させて頂きます。

> ところで、なぜ常駐させたいのか語られていないのですが、
> 自分だったら可能な限り常駐は避けます。
[PHP-users 34767]でもご説明させて頂いておりますが、定期的に処理を実行するプログ
ラムをプロセスとして常駐化させ利用したと考えたしだいです。
なた、開発言語としては
・システム全体としての統一性
・HTML、HTTP、MySQLが扱いやすいこと
を考慮し、PHPを利用したしだいです。

>  php自身、利用しているモジュールやライブラリ、自分で書いた
> プログラムのすべてについて、メモリリークがないことを保障するのは
> 難しいので、60回だけループして終了するようなプログラムにして、
> それをcronで10分置きに起動するとかを選択するでしょうね。
堀田さまからも同様のご指摘を頂いております。
[PHP-users 34774]
皆様から頂いたコメントを参考に、方式として再検討を行いたいと思います。

> ブラウザから開始/終了したいのであれば、apache側プログラムは
> 設定ファイルにフラグをセットするだけにするとか...。

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

[PHP-users 34778] Re: sleep関数が復帰せずプロセスがダウンする

by Yuji KUBOTA :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

堀田さま

この度はお世話になります。久保田と申します。

コメントを頂き感謝申し上げます。

> 堀田@長崎市です。
>
> On Thu, 17 Sep 2009 10:10:35 +0900
> Yuji KUBOTA <kubota.yuji@...> wrote:
> Subject: [PHP-users 34771] Re: sleep関数が復帰せずプロセスがダウンする
>
>>>> 定期的に処理を実行するプログラムをプロセスとして常駐化させ
>>>> 利用したと考えています。
>>> レンタルサーバーとか厳しい制約があるんでしたっけ。
>> 自己運営サーバーなので基本的にはサーバーに関する制限はなしです。
>> 開発環境としてPHPで統一しておきたいと言う理由です。
>
> 参考になるかどうかはわかりませんが、私の職場(大学)では多数の
> バッチ処理を php CLI で運用しています。一例を挙げると
職場の例を教えて頂き、ありがとうございます。

> root@gtr:~# cat /var/spool/cron/phpuser
> (略)
> #--------------------------------------------------------------------------
> # 入退室状況表示対象研究室ステータスの取得
> #--------------------------------------------------------------------------
> */1 * * * * $HOME/lc_view/progs/get_roomstat.php
> #--------------------------------------------------------------------------
> # 情報演習室におけるログイン状況の取得
> #--------------------------------------------------------------------------
> */5 * * * * $HOME/get_smbstatus.sh >> /tmp/get_smbstatus.log >&/dev/null
> #--------------------------------------------------------------------------
> # 年次更新
> #--------------------------------------------------------------------------
> 0 0 1 4 * $HOME/lc_view/progs/annual_update.php
>
> それぞれ1分間に1回、5分間に1回、年に一回の処理です。
>
> スクリプトの中身はいろいろ(オラクルやポスグレにアクセスしたり、
> ssh 経由でいろんなサーバを巡回したり、メールを送ったり)ですが、
> いずれにせよ、処理が終わったら単に終了すればいい(非常駐型)ので
> プログラムが単純になり、保守性も向上します。Web アプリじゃないの
> でセッションなどの状態遷移も意識する必要がない分、可読性もよく、
> ブラウザも不要です。昔の COBOL の感覚です。
>
> cron とシェルの使い方を覚えれば、いろいろと応用が利きますよ。
勉強になりました。
これだと常駐性がないので、扱いが楽になりますね。
取扱いを検討しています。

> 独立した処理を連続してやりたければ、複数の php スクリプトをまと
> めて実行するシェルスクリプト(上記の get_smbstatus.shがそれ)を
> 作って cron に登録する、などという具合です。
>
> エンドユーザに見せたい画面だけを Web アプリとして開発し、参照す
> る DB の中身は CLI が生成/更新する、という使い方が多いです。
>
>>> 常駐化なら、やはり常駐プロセスとしてプログラムを
>>> 作成するのが正攻法だと思います。
>> そのように見直すべきかとも考え始めております。
>> それにしても、なぜプロセスがダウンするかの原因は明確にして
>> おきたいと考えています。
>
> もし対象が制御系だったり、監視系(インターバルが1分以内)だった
> りする場合は、常駐型にならざるを得ないかもしれません。その場合で
> も CLI ならデバッグも楽だし、apache の介在がなくなるので、原因の
> 絞り込みも少しは楽になるかもです。
上記コメントも考慮し今後の扱いを検討させて頂きます。

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

[PHP-users 34779] Re: sleep関数が復帰せずプロセスがダウンする

by Yuji KUBOTA :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

前田さま

この度はお世話になります。久保田と申します。

コメントを頂き感謝申し上げます。

>  前田です。
>
>  同じ環境を作れないので、確認できないのですが、Apache自身の
> workerプロセスが終了するときに、シグナルが飛んできて一緒に
> 終了しているのでは無いですか?
そんな動きをしているのですね。勉強になりました。
Apacheの動きをもっと理解しないと行けないと痛感。

>  MaxRequestsPerChild の設定に依存しますが、デフォルト値は
> 10000となっており、10000リクエスト毎にサーバープロセスは
> 終了します。
MaxRequestsPerChildの値が0となっておりました。
と言う事は、今回のケースに関してはMaxRequestsPerChildの設定に関係ないと言う事で
すね。
追加情報ですが、何度か試験を繰り返すと同じ時刻(0:10)にプロセスがダウンしており
ました。
Apacheが定期的に何かを行っている事が怪しいと理解できます。
その点をつめてみたいと思います。

>  pcntl_signalで、シグナルハンドラ設定してログを書かせてみれば
> 判断できると思います。
>
>  飛んでくるシグナルを無視することで、プロセスが終了することは
> なくなりますが、もし、子プロセスが長期間待機する性質のもので
> あれば、CLI等で作ったデーモンプロセスを用意するほうがベター
> だと思います。
>  複数の異なるかも知れない親からforkされるプロセス群を安全に
> 管理するのは大変だからです。
>
>  シグナルを無視するようにしたとして、Apache自体を再起動した
> 際に、各々の子プロセスの後始末をきれいにやったり、安全な排他
> 処理を用意したりするのは気を使います。
他の方のコメントも含めて検討します。

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

[PHP-users 34787] Re: sleep関数が復帰せずプロセスがダウンする

by Yuji KUBOTA :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

北村さま

この度はお世話になっております。久保田と申します。

遅く報告となってしまいました。

>> 北村と申します。
>>
>> 若葉とか初心者とか名乗っても叩かれない、良い時代になりました。
>>
>> さて、本題ですが、
>>
>> Test_Sleep.phpの
>>
>>> while($loop_condition){
>> は無限ループになっているように思いますが、これは意図的なものですか?
> はい。そうです。
> 定期的に処理を実行するプログラムをプロセスとして常駐化させ利用したと考えています。
>
>> ログファイルが異常に大きくなってしまったとか。
> 今回作成されたログファイルのサイズは399KBでした。
> このサイズよりも大きなログファイルを扱った事があるのでプロセスダウンの原因とは考
> えられないと思います。(HDD容量にも問題なし)
>
>> あと、exec()の戻り値や標準エラーを取得すると、何か出てきませんか?
> 確認してみます。少々お時間を下さい。
エラーは出ておりませんでした。
_______________________________________________
PHP-users mailing list  PHP-users@...
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3