2016-04-06 9 views
0

私のサーバに自分の顧客のOpenCartシステムをインストールしました(サーバはDebian Wheezy、Nginx、PHP、MariaDB)。 1つのことを除いてすべてが正常に動作しています。顧客が登録しようとすると、登録にはおよそ3分ほどの時間がかかります。私は問題を追跡しており、顧客と管理者に電子メールを送信するときにハングする可能性が最も高いです。オープンカートの登録にはかなりの時間がかかります

SSMTPを使用してサーバー上の電子メールを処理します.SSMTPは自分自身の電子メールサーバーを使用します。 Joomlaのような他のWebアプリケーションはうまく動作し、電子メールは遅れなく即座に送信されます(システム内のメールコマンドと同じ)。 Opencartは "mail"に設定されています(私はSMTPをopencartに直接入力しようとしましたが、動作していませんでした)。

私はOpenCartsの内部動作について基本的に何も知らないので、誰かがこの問題で私を助けてくれますか?

ありがとうございます!

EDIT:

私はsuccessfuly問題の根本原因を特定することができました。それはPHPやOpenCartの問題ではなく、実際にはシステムの問題でした。 php.iniのsendmailパスの設定はコメントアウトされています。つまり、PHPはそれを見つけようとします。なんらかの理由で、OpenCartの場合にはsSMTPに行きました。 sSMTPは同期的なので、完了するのを待つのに時間がかかりました。一方、Joomlaは、Heirloom mailxを私のサーバ上でいくつかの古い依存関係から忘れてしまった(なぜ私は分かりません)、メールコマンドは即座に終了しました。

私の解決方法は、ssmtpとmailxをすべて破棄し、postfixを使用して外部サーバーにメールを中継することでした。今はすべてが期待通りに機能します。

答えて

0

私はこれを少し一般化します - 複雑なPHPシステムでのパフォーマンス上の問題を引き起こす根本的な原因です。

次の手順に従います。

  1. Xdebug PHP拡張機能をインストール
  2. はXdebugのprofilerprofiler_enableまたはprofiler_enable_triggerprofiler_output_pathなどを設定しますブラウザが遅いページへ)
  3. 移動しprofiler_enableが設定されている場合は、それが設定されていないとprofiler_enable_triggerがちょうどURLへXDEBUG_PROFILEパラメータを追加設定した場合、プロファイルは、リクエストごとに作成されます(それを読み込みます)
  4. あなたがprofiler_output_pathを設定し、いくつかのGUIツールでプロファイラ出力ファイルを開いているディレクトリに移動します(this answerを参照)関数呼び出しが最も時間を取った(関数呼び出しは、わずか5ミリ秒を取ることができ
  5. チェック1回の実行中に1000回呼び出された場合は5秒です合計でDS - あなたはGUIツールで、これらすべての情報が表示されるはずです)

注:

  • あなたはXdebugのは、本番サーバー上で有効になっているべきではありません(それは実行が遅くなります)
  • アプリケーションが他の誰かによってアクセスすることができるならば、profiler_enableを有効にするのではなく、profiler_enable_triggerので、あなたは要求がプロファイリングをトリガかを制御することができませんが(プロファイラ出力ファイルはかなり大きなものとなります)
+0

ありがとうございますが、残念ながらそれは私を助けません。私は開発マシン上で環境を複製しようとしましたが、問題はそこには存在しません(おそらく、devサーバは電子メールを送信できないためです)。問題のサーバーは、他の複数のアプリケーションがあるプロダクションサーバーなので、そこにxdebugをインストールすることはできません。 – user2823584

+0

@ user2823584プロダクションマシンでも、それをインストールして、プロファイラと 'profiler_enable_trigger'以外のすべてを無効にすることができます。他のアプリケーションのパフォーマンスに影響を与えるべきではありません。 –

+0

@ user2823584私の答えを受け入れていただきありがとうございます、私はあなたの問題を解決するのに役立つことを願っています。しかし、それはちょっとした指針です。あなたが問題を解決し、それを受け入れられた答えとしてマークすれば、根本的な原因と実際の解決策の詳細を投稿することができれば良いでしょう。 ;))。 –

関連する問題