1

ubuntu 12.04 64ビットマシンで重い作業を行うphp(バージョン5.3.10)cliアプリケーションがあります。このスクリプトは、受け取るデータセットによっては長時間実行される場合があります。これらのデータセットは、多数の XML、画像、および MS doc ファイルを含む zip ファイルです。

以前は、このスクリプトはいくつかのシステム コマンド (shell、perl、java) を使用してタスクを完了していました。その時は問題はありませんでした。最近、複数の同時呼び出しに RabbitMQ を使用するようにこれらのスクリプトをアップグレードし、cron ベースの作業から自動回復と監視のために Supervisord に移行し、シェルの呼び出しを回避するために php のコア ライブラリと関数を可能な限り使用しました。

現在、本番環境にデプロイした後、ZipArchive を使用してアーカイブを作成した行で、スクリプトが致命的にクラッシュすることがわかりました。具体的には、そのメソッド「open」と「addFile」のみ。問題のあるデータセットでこれを何度もテストしたところ、実際の問題はここにあることがわかりました。

スローされたエラーは、「致命的なエラー: 最大実行時間が 300 秒を超えました」でした。私たちはphpの実行時間の制限について知っており、php.iniと「/etc/php5/conf.d」フォルダーの下のすべての設定を再確認し、「max_execution_time」が0に設定されているすべての場所を確認しました。スクリプトのsapiも確認しましたモードは「php_sapi_name()」を使用した「cli」でした。ini_get("max_execution_time") も 0 を返します。

スクリプトがsupervisordで管理されている場合でも、上記のモードと実行制限は同じです。この「max_execution_time」の 300 秒の制限がどこからトリガーされているかを特定できませんでした。

もう 1 つ、このメッセージでクラッシュしたとき、スクリプトは実際には 600 秒以上実行されていました。また、ZipArchive だけで 300 秒以上かかる場合にのみ、これが発生すると考えています。しかし、よくわかりません。また、これが発生したときに作成される部分的な zip アーカイブは、280 MB から 290 MB の間です。そこで、レポジトリから php ソースをダウンロードし、簡単な grep を実行して、ZipArchive のコード ベースにそのような制限があるかどうかを確認しました。何も見つかりませんでした。

現在、回避策として ZipArchive php コードをシェル コマンドに置き換えようとしています。まだテストしていません。私たちの調査結果をすぐにここに投稿します。

以前にそのような問題に直面した人はいますか? これは ZipArchive に関連するものですか? 巨大なアーカイブを作成するために ZipArchive を使用することは推奨されますか? クラッシュする前に作成された部分的な zip ファイルは、280 MB から 290 MB の間でした。

4

1 に答える 1

0

ファイル> 500 MBでzipArchiveを使用すると、同じ問題が1回発生しました。場合によっては、サイズがかなり小さい場合にも動作しますが、ファイル数は多くなります。最後に、Linux zip/unzip コマンドのラッパーを作成し、それらを使用して、コアでは基本的に OS レベルで exec() を実行するだけにしました。それで問題があったことはありません。もちろん、アクセス許可などを設定するにはsysadが必要ですが、安定したソリューションです。

于 2013-04-17T18:51:42.537 に答える