2016-04-06 20 views
0

Ich habe gerade ein OpenCart System für einen meiner Kunden auf meinem Server installiert (Server ist Debian Wheezy, mit Nginx, PHP und MariaDB). Alles funktioniert gut, bis auf eine Sache. Wenn ein Kunde versucht, sich anzumelden, dauert die Registrierung sehr viel Zeit, etwa 3 Minuten. Ich habe das Problem verfolgt und es hängt höchstwahrscheinlich beim Senden von E-Mails an Kunden und an Admin.Opencart Registrierung dauert sehr lange

Ich handle E-Mails auf dem Server mit SSMTP, die wiederum meinen eigenen E-Mail-Server verwendet. Andere Webapps wie Joomla funktionieren gut und E-Mail wird sofort und ohne Verzögerung gesendet (dasselbe gilt für Mail-Befehle im System). Opencart ist auf "mail" eingestellt (ich habe sogar versucht, SMTP direkt in opencart einzutragen, aber es hat nicht funktioniert).

Da ich im Grunde nichts über OpenCarts Innenleben weiß, kann mir jemand erfahrener bei diesem Problem helfen?

Vielen Dank im Voraus!

EDIT:

ich in der Lage gewesen, die Ursache des Problems successfuly zu identifizieren. Es ging nicht um PHP oder OpenCart, sondern um eine System-Sache. Die Einstellungen für den sendmail-Pfad in php.ini wurden auskommentiert, was bedeutet, dass PHP versucht, es selbst zu finden. Aus irgendeinem Grund ging es im Falle von OpenCart für sSMTP. Da sSMTP synchron ist, hat es lange gedauert, bis es fertig war. Joomla auf der anderen Seite, ging für Heirloom Mailx vergessen auf meinem Server aus einer alten Abhängigkeit (warum ich keine Ahnung habe) und der Mail-Befehl sofort beendet, also keine Verzögerung.

Meine Lösung nach Stunden der Fehlersuche und Testfehler war, ssmtp und mailx insgesamt zu verschrotten und Postfix zu verwenden, um Mail an externen Server weiterzuleiten. Jetzt funktioniert alles wie erwartet.

Antwort

0

Ich werde es ein wenig verallgemeinern - wie zu verursachen, die Leistungsprobleme in komplexen PHP-Systemen.

Gehen Sie folgendermaßen vor:

  1. installieren Xdebug PHP-Erweiterung
  2. Konfigurieren der Xdebug des profiler (profiler_enable oder profiler_enable_trigger, profiler_output_path usw.)
  3. Navigieren Sie zu der Seite, die in einem Browser langsam ist und laden Sie es (wenn profiler_enable das Profil für jede Anforderung erstellt wird gesetzt, wenn er nicht gesetzt ist und profiler_enable_trigger wird nur hinzufügen XDEBUG_PROFILE Parameter an die URL gesetzt)
  4. Navigieren in das Verzeichnis Sie konfiguriert haben profiler_output_path an und den Profiler Ausgabedatei in einigen GUI-Tool öffnen (this answer)
  5. prüfen Sie, welche Funktionsaufruf (ein Funktionsaufruf die meiste Zeit kann nur 5 ms nahm sehen nehmen , aber wenn es während der einzelnen Ausführung 1000 Mal aufgerufen wird, ist es 5 Sekunden ds insgesamt - Sie alle diese Informationen in der GUI-Tool sehen sollte)

Hinweise:

  • Sie sollten nicht haben Xdebug auf einem Produktionsserver aktiviert ist (es verlangsamt die Ausführung)
  • , wenn Ihre Anwendung kann von jemand anderem zugegriffen werden kann, kann profiler_enable nicht aktivieren, sondern profiler_enable_trigger, Sie können so kontrollieren, welche Anforderungen die Profilierung auslösen (Profiler Ausgabedatei ziemlich groß sein kann)
+0

Vielen Dank für Ihre Antwort, aber leider hilft es mir nicht. Ich habe versucht, die Umgebung auf Entwicklungsmaschine zu replizieren, aber das Problem ist dort nicht anwesend (wahrscheinlich, weil dev-Server nicht in der Lage ist, email zu senden). Der Server, auf dem das Problem auftritt, ist ein Produktionsserver mit mehreren anderen Apps. Daher kann ich dort xdebug nicht installieren. – user2823584

+0

@ user2823584 Obwohl es sich um eine Produktionsmaschine handelt, können Sie es trotzdem installieren und alles außer profiler und 'profiler_enable_trigger' deaktivieren. Es sollte die Leistung anderer Anwendungen nicht beeinflussen. –

+0

@ user2823584 Vielen Dank für die Annahme meiner Antwort, ich hoffe, es wird Ihnen helfen, Ihr Problem zu lösen. Aber es ist nur eine Anleitung, es wäre gut, wenn Sie die Details über eine Grundursache und echte Lösung für Ihr Problem veröffentlichen könnten, wenn Sie es lösen und es stattdessen als akzeptierte Antwort markieren (und Sie können einfach meine Antwort abstimmen ;)). –