私は、機能がおよそ10000のテキストファイルを分析し、そこから内容を抽出し、それをmysqlデータベースに入れるアプリケーションをphpで構築しました。コード自体は、すべてのファイルがfile_get_contents()
によってロードされ、その反復の終了後、メモリからのunset()
のforループです。ファイルの分析はcronジョブであり、単一のPHPファイルがすべてこの処理を行います。EC2は共有ホストよりも遅いですか?
しかし、問題は、アプリケーションが完全に共有サーバー上に構築されたことです。すべてがシームレスにうまく機能しました。私は遅れや大きな遅れに気づいていませんでしたが、ユーザーがそれ以上の負荷を処理できるようにするためには、すべてをEC2サーバー(マイクロインスタンス)に移動しました。
私が今問題にしているのは、cronjob(毎時ファイルを処理する)を実行するたびにサーバー全体が遅くなりすぎて、通常のページがロードに約5-8秒かかってしまうことです。それをEC2に移すという目的を破る。
cron自体は非常に長いプロセスです。ここではスクリプトプロセスのいくつかのテスト結果(すべての時間)
SQL Insertion Time: 23.138303995132 seconds
Memory Used: 10.05 MB
Execution: 411.00507092476 seconds
しかし、すべての時間の上には、私は(サーバが共有サーバーに比べてより多くの専用のハードウェアアクセラレーションを持つのにもかかわらず、7分間のダウンそんなに遅くしています少なくとも思う)。 EC2ダッシュボードのグラフは、CPU使用率が100%に近いことを示していますが、そのレベルに達する方法はわかりません。
なぜこのようなことが起こる可能性があるのかを誰かが助けてくれますか?私はcronが共有サーバー上で動作しているにもかかわらず、少し遅れていないことに気付きましたが、EC2の場合とはまったく異なります。
私が言及しなかったものは何でもお気軽にお問い合わせください。
もう1つ:サーバーにAPCがインストールされていることを確認してください。それも大きな違いになります。 – Homer6
コメントありがとうございます!私は同意します。コンパイルされていても、テキストファイルのいくつかにHTMLがあり、PHPが本当に良いDOMパーサのlibを利用できるということは、もっと速いでしょう。そのすべてを移植することはちょっと面倒です。 – Kartik
私はapcをインストールし、違いがあるかどうかを見てみましょう! – Kartik