0

こんにちは、php アプリケーションで障害が発生し、イベント ログにエラーが表示されることがあります。

エラーが発生しているアプリケーション名: php-cgi.exe、バージョン: 5.3.6.0、タイム スタンプ: 0x4d81eb28 エラーが発生しているモジュール名: php5.dll、バージョン: 5.3.6.0、タイム スタンプ: 0x4d81ebdc 例外コード: 0xc0000005

また、イベントが記録されていないエラーが記録された fast-cgi エラーが発生する場合もあります (ローカル サーバーで参照できます)。

C:\Program Files (x86)\PHP\v5.3\php-cgi.exe - FastCGI プロセスが予期せず終了しました

この場合、エラーはイベント ログに記録されませんが、常に次の 2 つのエントリが障害の直後に続きます。

リスナー アダプター プロトコル 'net.pipe' が Windows プロセス アクティベーション サービスに正常に接続されました。リスナー アダプタ プロトコル 'net.tcp' が Windows プロセス アクティブ化サービスに正常に接続されました。

アプリケーションがどのように障害を起こし、どのようにログに記録されるかについての論理はないように見えますが、常にどちらか一方であり、明らかにそれらは関連しています。

私たちのアプリケーションは比較的複雑ですが、正常に実行されるか正常に実行されないかの唯一の違いは、一部のルーチンで異なる数値がフォーマットされる可能性があるデータセットへの変更です。

XDebug(PHP Storm)をつけて実行をトレースすると問題なく完了します。トレースせずに実行すると、上記の障害シナリオのいずれかが明らかになります。

私が提供した情報でこの動作を説明できる人はいますか?特に、デバッガを接続してアプリケーションをトレースすることで問題が回避されるのはなぜですか?

これをどのようにデバッグしますか?

ありがとう。

4

1 に答える 1

2

私たちのアプリケーションはトレースを生成しますが、出力バッファが原因で、障害が発生した場合に表示されませんでした。

したがって、トレースの各行に時間とメモリ使用量が表示されるようにします。

  1. トレースを 1 行ずつファイルに出力します。
  2. パターンのさまざまな実行のトレースを比較します。

私の場合、唯一のパターンはメモリ消費でした。成功した実行では 60 MB 未満が使用され、失敗した実行では 60 MB 以上が使用されました。

アプリケーション プールは 32 ビット アプリケーション モードをサポートしていませんでした。32 ビット モードに切り替えると、メモリ消費量が半分になり、すべてが以前と同じように実行されるようになりました。

ちなみに、php にはアプリ プールと同じように php.ini にメモリ制限が設定されていないため、これはポインターの問題であると推測されますが、再び前進できることを嬉しく思います。

于 2012-02-27T15:44:32.207 に答える