私は、Amazon EC2 'Large'インスタンス、つまりPHP5とMySQLを使用したUbuntu Natty x64を実行しています。我々はCRONを介してPHPスクリプトを実行します - これはSMTP/PHPMailerを使用して電子メールリスト(2000-4000電子メール)を送信します。PHP CRON電子メールをCPUに送信
サーバーの動作が非常に遅い(これらのCRONジョブのいくつかはパラレルに実行されます)、CPUが100%になります。メモリ使用量は低く(約600MB/8GBしか使用されない)、各CRONジョブはCPU%のかなりの部分を占有します。たとえば、それぞれ20〜30%、4-5台が並行して実行されます。
問題を特定しようとすると、MySQLで低速のクエリログが実行されましたが、私の注意を引いたものはありませんでした。このCPU使用率の原因を絞り込むにはどうすればよいですか? SMTP /電子メールはCPUを集中的に使用しているのでしょうか、それともプログラミングやサーバーの問題があることを示す記号ですか?ありがとう!
EDIT:問題が解決されます。電子メールが「成長」する(以前の電子メールコンテンツの一部が次の電子メールに注入されていた)些細な(もちろん)バグがあったため、電子メールの前処理は各加入者にとってますますばかげてしまった。結果として得られた電子メールには数百/数千のトラッキングイメージがあり、開いたときにすべてが同時にサーバーに当たった。つまり、イメージをgmailに表示する。自爆したDDoS攻撃と2日間の眠りを止めた後、私は人生で様々な選択肢を考えながらモーガンキャプテンのボトルを楽しむつもりです。
PHPスクリプトはループで連続して実行され、4000個の電子メールを送信しますか、または繰り返し停止して再起動しますか?コマンドラインスクリプトとしてPHPファイルを繰り返しトリガすると、CPUを集中的に使用してオペコードを生成することがあります。 – DhruvPathak
各CRONジョブは1分に1回実行されますが、「1つの」リスト(4Kメール)を送信してから停止します。このリストの実行中、PHPスクリプトは4000個の電子メールをループし、いくつかの情報を設定し、各電子メールを個別に送信するSMTP接続を行います。 – Harper
最初にやるべきことは、電子メールを実際にキューに入れた行をコメントアウトしてから、プロセス全体を再度実行して何が起こるかを確認することです。つまり、すべてのコードを実行してメッセージコンテンツを生成しますが、実際にはメッセージを送信しません。これは、それが世代であるか、問題を引き起こしている送信であるかを少なくとも伝えます。 –