2011-11-14 11 views
0

私は、機能がおよそ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の場合とはまったく異なります。

私が言及しなかったものは何でもお気軽にお問い合わせください。

答えて

2

マイクロインスタンスはかなり遅いです。より大きなインスタンスを使用すると、より速く実行されます。

私たちはすべての生産用ボックスにEC2を使用しています。私はそのプラットフォームに関する十分な良いことを言うことができません。私は決して別のホストに戻りません。

また、C++でコードを記述したい場合は、より速く実行されます。私はこのコードhereで簡単なmysqlの挿入を書いた。マルチスレッドなので、mysqlの更新や挿入を非同期で実行できます。

私はあなたにそれについての助けが必要かどうか教えてください、しかし私はあなたがちょうどマイクロインスタンスを使用して素晴らしいスピードを得ることができると確信しています。

希望するもの...

PS。あなたのC++バージョンを書くのを手伝ってもらいたいのですが...楽しいからです! :-)

+0

もう1つ:サーバーにAPCがインストールされていることを確認してください。それも大きな違いになります。 – Homer6

+0

コメントありがとうございます!私は同意します。コンパイルされていても、テキストファイルのいくつかにHTMLがあり、PHPが本当に良いDOMパーサのlibを利用できるということは、もっと速いでしょう。そのすべてを移植することはちょっと面倒です。 – Kartik

+0

私はapcをインストールし、違いがあるかどうかを見てみましょう! – Kartik

0

よくEC2はスケーラビリティがあるように設計されています。

コードが1つのループで実行されているため、各ファイルが順番に開くため、スケーラブルなデザインにはなりません。

ファイルを分割して、ファイルがPHPスクリプトの異なるインスタンスで同時に処理されるように、コードを変更してみてください。こうすることで、スクリプトの各コピーを1つのスレッドで単独で実行することができます。複数のサーバー(またはEC2内のサーバーのインスタンス)を使用している場合は、それらを異なるマシン上で実行して、さらに高速化することができます。

+0

こんにちは、私は自分のコードを分割し、それらを分類した後にファイルを分析することができますが、それをやめさせているのは、スクリプト自体が613MBのインスタンスの〜12MBまたはRAMを取るという事実です。すべてが利用可能です)、共有ホスティングには全く問題はありませんでした。だから私は二倍以上の経費を支払う前に、誰かがこのようなことが問題であるかどうかを知りたがっているかどうかを知りたい – Kartik

+0

まあ、私はEC2の専門家ではないので、間違っていれば修正してください... EC2はすべてのサーバーを仮想サーバーとして実行するので、ハードウェアへのアクセスは仮想化されます。ディスクアクセスが少し遅くなるという意味ですか? – iWantSimpleLife

+0

私はそれについては分かりませんが、あなたが何を言おうとしているのか理解しています。 apcとmemcachedを利用してコードを改善し、CPU使用率を下げるかどうかを調べる予定です。 – Kartik

関連する問題