cakephpのアクションhevy_program実行中に、
Aサーバでは「run_light」のコールバック関数が実行され、
Bサーバでは「run_light」のコールバック関数が実行されないという現象が発生しています。
アパッチのアクセスログを見ると、
Aサーバは1ブラウザからのリクエストに対して
複数の子プロセスがリクエストを受けているように見えます。
しかし、Bサーバは1ブラウザからのリクエストに対して
1つの子プロセスがリクエストを受けているように見えます。
→ check_programへのアクセスログが、hevy_programの処理完了後に
複数個書き出されるためそう考えております。
■質問
このような挙動となる原因(設定など)をご教示いただけないでしょうか?
アパッチ(httpd.fonfやconf.d以下のファイル)やPHP周り(php.ini)の設定を見ましたが、特に気になる点はありません。
他に見るべき点があれば、アドバイスをいただけないでしょうか。
※サーバごとでリクエスト実行の挙動が異なるため、設定を気にしています。
※サーバ構築者はいないので、詳細な設定は不明です。
また、このようにアパッチに重たい処理をさせ、Ajaxの非同期処理で進捗を確認する方法は良い方法なのでしょうか?
※重たい処理はcommandとしてバックグラウンドで処理する方法を採用すべきと考えますが、その方法に切り替える時間がないため、Ajax非同期処理を採用しました。
■行っていること
下記のようなプログラムでajaxを行っています。
hevy_programはcakephpのアクションで、
Mysqlのいくつかのテーブル(A、B,C)上にあるレコードのUPDATEを行っています。
また、処理の最後に、Dテーブルのあるレコードに対して結果(成功 or 失敗)を書きます。
※トランザクションありで、処理は20分ほどかかります。
check_programはcakephpのアクションで、
前述のhevy_programが終わったかを確認する処理です。
Dテーブル上のレコードを参照し、終了したかどうかを判定し戻します。
※Dテーブルのあるレコードはhevy_programが終わるまで、処理中が入ります。
// ボタンクリックで実行 run_hevy(); function run_hevy(){ var URL = "hevy_program"; $.ajax({ url: URL, type:'POST', dataType: 'text', async:true, cache: false, data : {id : 10000}, timeout:10000, success: function(data) { }, error: function(XMLHttpRequest, textStatus, errorThrown) { } }); run_light(); } function run_light(){ var URL = "check_program"; $.ajax({ url: URL, type:'POST', dataType: 'text', async:true, cache: false, data : {id : 10000, timeout:300000, success: function(data) { }, error: function(XMLHttpRequest, textStatus, errorThrown) { } });
回答2件
あなたの回答
tips
プレビュー