Newsletter aussenden geht viel langsamer als bei SharedHosting

  • Grundsätzlich bin ich zufrieden mit meinem neuen VPS Server. Allerdings hab ich ein Problem, dass ich bei keinem SharedHosting-Tarif, jedoch bereits beim vorigen VPS-Server bei Webgo hatte (mit nur 8GB RAM, statt hier 16GB), weshalb ich nun zu Netcup gezogen bin, um es auch hier zu testen. Allerdings ist das Problem das selbe.


    Zum Problem:

    Ich versende einen für jeden User individuell anpassbaren Newsletter täglich an 30.000 Abonnenten direkt von einem Adminbereich meiner Website, was bei zwei SharedHosting-Paketen, die ich davor hatte immer einwandfrei in 1,5 Stunden über die Bühne ging, ohne die Website langsam zu machen.


    Auf dem neuen VPS-Server dauert dies nun 4 Stunden und die gesamte Seite wird - zumindest auf dem Rechner, von dem aus ich den Newsletter versende - extrem langsam (> 30 Sekunden Ladezeit).


    Der Newsletter-Versand erfolgt über Amazon SES (externe Mailserver von Mailchimp und Co wären 10 mal so teuer) auf einer Wordpress-Seite mit dem dafür vorgesehenen Plugin "WP SES", der alle wp_mail Befehle an Amazon zum Aussenden umleitet. Es liegt auch wirklich an diesem umgeleiteten wp_mail Befehl, denn deaktiviere ich diesen, geht alles gewohnt schnell. Der Nutzer werden auf 6 Seiten gleichzeitig durchlaufen und die Mails ausgesendet.


    Ich habe es auch gestern noch mit einem SharedHosting-Paket versucht und da ging es in normaler Geschwindigkeit und ohne die Seite zu verlangsamen. Nur mit dem eigenen VPS-Server habe ich damit immer Probleme.


    Der Netcup-Support meinte:

    "Bei einem Webhosting-Tarif haben Sie je nach Anbieter einen separaten Mailserver im Hintergrund laufen. Sie machen nun alles über einen einzigen Server. Wenn dieser durch den Versand ausgelastet wird, können auch Ressourcen für Ihre Webpräsenz fehlen. Das ist aber nur eine mögliche Ursache."


    In diesem Punkt wäre also SharedHosting womöglich eine bessere Alternative, allerdings möchte ich auch frei von Einflüssen anderer Nutzer sein, weshalb ich nun auf den vServer gewechselt bin. Wäre es vl eine Idee, einen günstigen SharedHosting Tarif dazuzubuchen, nur für den E-Mail Versand? Die E-Mails müssten aber weiterhin von meiner Domain aus gesendet werden, die ja auf dem vServer registriert ist.


    Habt ihr Vorschläge, wie ich weiter vorgehen soll?

    Oder womöglich Erfahrungen damit und weitere Tipps?


    Häng mit diesem Problem etwas in der Luft.

  • Hallo semiprecious


    welche PHP Version setzt du ein und wie sieht deine PHP Konfiguration aus?


    Eine Vermutung die ich hätte: die Mails werden sequenziell gesendet. Somit wird nie mehr als ein Prozessorkern benutzt, was natürlich bei der entsprechenden Anzahl an Mails nicht skaliert.


    Wie sieht die Systemauslastung während des Sendens aus?


    Ich tippe darauf, dass an der Konfiguration etwas klemmt.

  • Bei 0.10€ pro 1k E-Mails macht das Amazon doch etwa 1000 USD/Monat, sind die Preise richtig?


    Wenn dem so ist, probiere doch mal Sparkpost EU aus. Da zahlst du nur etwas mehr als die Hälfte und du kannst via API senden und zusätzlich E-Mail Listen einbinden, hast also bei einem klassischen Newsletter nur einen curl command für beliebig viele Empfänger.

    (Natürlich inkl. Tracking, Templates, Textersetzung, Abmeldelinks und Co.)


  • Danke schonmal für deine Hilfe, klingt interessant :)


    PHP: 5.6.4 by OsVendor (hab es aber auch schonmal mit 7.x versucht)


    Ja, ich kenn mich nur mit wenigen PHP-Einstellungen aus, die ich iwann mal gebraucht habe, ich hab hier auf dem Server auch noch gar nichts daran geändert. Welche Einstellungen könnte ich denn da ändern bzw. wie benutze ich alle Prozessorkerne?


    Anbei meine php.ini (ein paar Einträge habe ich mit "censored" versehen, zur Sicherheit)



    Zum Offtopic:

    30% Opening Rate - es sind nicht immer die gleichen Nutzer, die den Newsletter erhalten, je nach Interessen - aber 30k sind's pro Tag, kein Spam.

    Auf 90$ im Monat komm ich bei 1$ pro 10k Emails (3$ pro Tag).

  • Wenn das ganze nicht privat, sondern kommerziell läuft, guck dir mal HubSpot an. Bietet auf jeden Fall einiges an zusätzlichen Möglichkeiten. Kostet aber auch nen bissel mehr. Kann ich aber wärmstens empfehlen.

  • hab es aber auch schonmal mit 7.x versucht

    Wie war das Ergebnis? Besser, schlechter?

    PHP5 ist nun schon seit einiger Zeit EOL und sollte nicht mehr verwendet werden.


    Mich würde mal interessieren, wie der ganze Sendevorgang abläuft.

    In der INI steht nämlich eine max_execution_time von 30, d.h. ein PHP Skript darf maximal 30 Sekunden lang laufen.

    D.h. es gibt hier drei Laufmöglichkeiten:


    1.: PHP sendet jede einzelne Mail über SES, d.h. jede Mail ist ein Request an SES. Der Fortschritt wird zwischengespeichert und bei Ablauf der 30 Sekunden abgebrochen. Wenn die Seite erneut aufgerufen wird, oder ein Cronjob ausgeführt wird, dann wird weiter gesendet.


    -> Gegenmaßnahmen: Max Execution Time des FPM-Pools erhöhen und Frequenz des Cronjobs erhöhen.


    2.: PHP sendet einen Request. SES hat bereits eine Empfängerliste oder diese ist in dem Request enthalten.


    -> Problem liegt bei SES


    3.: PHP forkt sich selbst. (Ist das möglich? Wird das so gehandhabt?)


    ---

    Bringen wir mal ein wenig Mathe ins Spiel. AWS SES Irland braucht ca. 0,13s pro Anfrage. Bei 30.000 Anfragen braucht es also 69 Minuten an Zeit, wenn diese sequentiell gestellt werden. (Stimmt überein mit den 1,5h Eingangs)


    Hast du möglicherweise einen US-Endpunkt gewählt?

    Wie groß ist der FPM-Pool? (Shared-Hosting verwendet meistens MPM-Prefork) [wegen der 6 Seiten paralell]

  • Ich habe nun auf PHP 7.2.16 gewechselt, max_execution_time auf 120 - selbes Ergebnis.

    Habe nun auch die CPU mit dem SSH TOP-Befehl überwacht, sieht meines Wissens nach auch recht normal aus während des Aussendens:


    ssh -t 195.128.101.220 top


    Tasks: 4 total, 1 running, 3 sleeping,   0 stopped,   0 zombie

    %Cpu(s): 4.3 us, 3.7 sy, 0.0 ni, 91.7 id, 0.1 wa, 0.0 hi, 0.1 si, 0.2 st

    KiB Mem: 16471256 total, 15661148 used, 810108 free, 311136 buffers

    KiB Swap:        0 total,        0 used,        0 free. 13777276 cached Mem



    Ja, auf jeder der 6 Seiten werden die Nutzer durchlaufen (z.B. Seite 1: User 1-7500, Seite 2: User 7501-15000, etc.).

    Pro Ladevorgang einer Seite werden die Interessen von 15 Usern geladen und anhand dessen der Newsletter ausgesendet, danach wird die Seite erneut geladen und es kommen die nächsten 15 User. d.h. für jede einzelne Mail ein eigener wp_mail über SES Befehl. Jede Seite lädt jetzt eben über 10 Sekunden statt vl 3-4 Sekunden davor.


    Bei Amazon SES ist weiterhin ein europäischer Server gewählt. Habe hier nichts geändert vom Umzug von SharedHosting zu VPS.

    Bei 2 SharedHosting-Tarifen (zwei unterschiedliche Firmen) ging das Aussenden in 1,5 Stunden, bei zwei VPS-Servern (auch zwei unterschiedliche Firmen) dauert es 4 Stunden und die Seite wird langsamer.

  • Ja, auf jeder der 6 Seiten werden die Nutzer durchlaufen (z.B. Seite 1: User 1-7500, Seite 2: User 7501-15000, etc.).

    Pro Ladevorgang einer Seite werden die Interessen von 15 Usern geladen und anhand dessen der Newsletter ausgesendet, danach wird die Seite erneut geladen und es kommen die nächsten 15 User. d.h. für jede einzelne Mail ein eigener wp_mail über SES Befehl. Jede Seite lädt jetzt eben über 10 Sekunden statt vl 3-4 Sekunden davor.

    wir nutzen seit Jahren die Einstellung von 100 User deren Interessen geladen werden. Oft sind das aber auch spezielle Einstellungen die bei dem Server

    und Hosting verschieden sind. Bei einigen Servern kann auch ein andere sendmail Konfiguration, die entweder vom Hosting zu erfragen sind oder eventuell

    kennt jemand den speziellen netcup vps Befehl. Benchmarks sind auch ein Option aber kann dauern. Das gleiche gilt auch für curl Konfigurationen. Aus Erfahrung

    weis ich das eine einzige sendmail option den Versand von Newslettern oder eMails um mehrere Stunden beschleunigen kann und die Newsletter dann nach 1,5 h versendet sind. Das hat nichts mit den php Einstellungen zu tun wie max_execution_time oder andere.

    Eventuell kann der Netcup Support die Einstellung auch nennen, das geht am schnellsten.

    Gut ist auch immer zu testen wie Mails versendet werden, sendmail, php-mail, curl oder andere.