Neu Stabilität und Performance optimieren

  • Temporäre Senkung der Mehrwertsteuer Hier findet ihr gesammelt alle Informationen, Videos und Fragen inkl. Antworten: https://forum.jtl-software.de/threads/mehrwertsteuer-senkung-vom-01-07-31-12-2020-offizieller-diskussionthread-video.129542/

lroehrs

Neues Mitglied
10. September 2020
5
0
Moin!

Ein Kunde von uns hat Anfang kommende einen TV Auftritt und die ersten Lasttest zeigen bereits, dass der Shop höchstwahrscheinlich dem Ansturm nicht standhalten wird.

Eckdaten:
  • Shopversion: 4.06 (Build: 17)
  • PHP7.3
    • mit OPcache und APCu
  • Web/DB Cluster mit jeweils 32 Kernen
Sämtliche Software ist entsprechend aktuell, Objekt Cache ist aktiv und Sessions werden über Redis gesteuert.
Bei dem Lasttest in dem nur GET Abfragen stattfanden komme ich nicht über ca. 350rps bei nahzue 100% CPU Last auf dem Webserver.
Mit vergleichbaren Shopware Shops sind wir dabei bei mind. 850rps. Jeweils ohne Medien, entsprechend "nur" Seiten-Generierung.

Der JTL Cache habe ich ursprünglich auf Redis gesetzt, getestet jedoch auch auf Disk und tmpfs - kommt alles auf das ähnliche hinaus.
Ohne Last ist der Shop super schnell, da gibt es nichts zu beanstanden.


Bei einer Tideways-Prüfung fiel mir dann auf, dass jeder Aufruf über 20 SQL Abfragen entstehen.
Die Abfragen sind ohne Login o. ä., ich erwarte da eigentlich, dass mehr aus dem Cache beantwortet wird.
Ist das bei JTL so üblich?

Die Datenbankabfragen auf dem Datenbanken-Server fallen auch entsprechend hoch aus.

Hat jemand Tipps oder fällt ggf. noch jemanden eine Fehlkonfiguration auf?

Danke! :)
 

hula1499

Sehr aktives Mitglied
22. Juni 2011
3.847
550
Hm, witzige/interessante Beobachtung.

Wir haben/hatten diverse Promotions und in der ersten Stunde dann 10-15k Leute auf der Seite, davon dann rund 60-70% conversions.

Live-Tests/config:
Die CPU langweilt sich und geht nie über 5% (Strato D670, SSD, 64GB RAM)
REDIS
CDN für js/css/Bilder (nimmt natürlich viel Last ab)
ngix / sql voll auf RAM getrimmt (der geht dann aber auch auf ~90%)

An den Millionen DB Abfragen kannst leider nicht wirklich was machen.

Worauf du dich bei so einem kurzfristigen Ansturm einstellen kannst/musst:
.) nicht unerhebliche Anzahl von Doppelbestellnummern ausm Shop
.) Lagerstand Abgleichsprobleme: da Shop/ WaWi da recht zum stocken beginnen (puffer grosszügig einplanen, Abgleichintervalle runtersetzen)
.) solltest du mit Lagerbestand arbeiten und dieser während der Bestellungen ausgehen, bekommt dein Kunde auch diverse "Leerbestellungen" bedeutet: bezahlte Versandkosten ohne Produkte :D
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: lroehrs

FMoche

Moderator
Mitarbeiter
15. Dezember 2014
781
93
Halle (Saale)
Ahoi,

20 SQL-Abfragen pro Seite sind realistisch. Besucherstatistik und ein paar Kleinigkeiten werden immer direkt über die DB gemacht.
Für einen echten TV-Modus macht es aber auch keinen großen Unterschied - da wirst du um HTML-Caching nicht herumkommen.

Ich habe hier noch einen experimentellen Branch rumliegen, der für solche Fälle den Smarty- Cache nutzt und somit die aufwendigste Shoplogik umgeht.
Alternativ bietet sich als schnellste Möglichkeit der FastCGI-Cache an. Damit könnte man dann zumindest die Besucher abfedern, die keine Artikel im Warenkorb haben und nicht eingeloggt sind. Das sollte aber schon helfen.

Meine Testkonfiguration in nginx sieht ungefähr so aus:

Code:
upstream _php {
    server unix:/var/run/php/php7.4-fpm.sock;
}

fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=JTLSHOP:350m inactive=180m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;

server {
    set $skip_cache 1;
    if ($request_method = GET) {
        set $skip_cache 0;
    }
    if ($request_uri ~* "/(warenkorb.php|admin|jtl.php|warenkorb|cart|konto|account)"){
        set $skip_cache 1;
    }
    if ($http_cookie ~* "eSIdAdm|jtl_logged_in|jtl_no_cache|jtl_cart") {
        set $skip_cache 1;
    }

    location ~ \.php$ {
        try_files $uri $uri/ =404;
        fastcgi_pass _php;
        fastcgi_cache_bypass $skip_cache;
        fastcgi_no_cache $skip_cache;
        fastcgi_cache JTLSHOP;
        fastcgi_cache_valid 200 60m;
    }
}
Dazu dann ein Mini-Plugin, dass sobald ein Artikel in den Warenkorb gelegt wird den Cookie "jtl_cart" setzt und nach dem Login den Cookie "jtl_logged_in".


Hat aber alles seine Grenzen, was die Kompatibilität mit diversen Plugins anbelangt.
 
  • Gefällt mir
Reaktionen: lroehrs

lroehrs

Neues Mitglied
10. September 2020
5
0
Das ist ja mal echt interessant.

Ich habe mir mal angeschaut, wie die Auslastung entsteht:

Code:
[2020-09-11 11:53:11]: FCGI Script: /index.php? Uid: 1001 Utime: 8
[2020-09-11 11:53:11]: FCGI Script: /index.php? Uid: 1001 Utime: 6
[2020-09-11 11:53:11]: FCGI Script: /index.php? Uid: 1001 Utime: 8
[2020-09-11 11:53:11]: FCGI Script: /index.php? Uid: 1001 Utime: 8

grep "2020-09-11 11:53:11" /home/var/log/scripts/fcgi | wc -l
369
grep "2020-09-11 11:53:12" /home/var/log/scripts/fcgi | wc -l
373
grep "2020-09-11 11:53:13" /home/var/log/scripts/fcgi | wc -l
360
grep "2020-09-11 11:53:14" /home/var/log/scripts/fcgi | wc -l
353
-----

Utime = CPU Sekunden * 100
360*0,08=28,8 ~29 Kerne

Das entsteht bei ca. 350 Request. Entsprechend ist es klar, dass der Webserver nahezu vollständig ausgelastet ist.
Anhand des Tideways Traces vermute ich, dass es durch Smarty Berechnungen kommt.

Der Nginx Cache Aufbau würden wir wahrscheinlich noch hinbekommen, der Auftritt ist jedoch am Montag.
Das entsprechend Plugin müsste durch den Kunden/Agentur erfolgen, wage etwas zu bezweifeln das es in der Zeit realisierbar ist.

> Ich habe hier noch einen experimentellen Branch rumliegen, der für solche Fälle den Smarty- Cache nutzt und somit die aufwendigste Shoplogik umgeht.
Wo ist der denn zu finden? :)
 

lroehrs

Neues Mitglied
10. September 2020
5
0
Ich hab mit zwei Partner-Agenturen gesprochen, die folgendes Plugin erwähnten:

https://shop.knoell-marketing.de/JTL-Supercache

Auswirkung:

Code:
[2020-09-11 14:32:03]: FCGI Script: /index.php? Uid: 1001 Utime: 1
[2020-09-11 14:32:03]: FCGI Script: /index.php? Uid: 1001 Utime: 0
[2020-09-11 14:32:03]: FCGI Script: /index.php? Uid: 1001 Utime: 0
[2020-09-11 14:32:03]: FCGI Script: /index.php? Uid: 1001 Utime: 1
[2020-09-11 14:32:03]: FCGI Script: /index.php? Uid: 1001 Utime: 1
[2020-09-11 14:32:03]: FCGI Script: /index.php? Uid: 1001 Utime: 1
[2020-09-11 14:32:03]: FCGI Script: /index.php? Uid: 1001 Utime: 1

grep "2020-09-11 14:32:03" /home/var/log/scripts/fcgi | wc -l
1066
grep "2020-09-11 14:32:04" /home/var/log/scripts/fcgi | wc -l
1116
grep "2020-09-11 14:32:05" /home/var/log/scripts/fcgi | wc -l
1135
Bei einer CPU Last von ca. 65%.


Eine wird sich ggf. den Shop nochmal weiter anschauen, teile ich aber auch das Ergebnis aus diesem Thread mit.
Danke!
 

juergen-sfx

Offizieller Servicepartner
SPBanner
28. Februar 2013
31
1
Code:
...
    if ($request_uri ~* "/(warenkorb.php|admin|jtl.php|warenkorb|cart|konto|account)"){
        set $skip_cache 1;
    }
...
Hat aber alles seine Grenzen, was die Kompatibilität mit diversen Plugins anbelangt.
Ich mache mir da besonders in Hinblick auf Zahlungsplugins Sorgen. Müsste man da nicht die Anfragen z.B. von der PayPal IPN irgendwie ausschließen?
Ich sehe da z.B. in unseren Logs:
/includes/modules/notify.php auf das GET Anfragen abgesetzt werden.

Vielleicht könnte man hier im Thread die URLs sammeln, die man vom Caching ausschließen muss, das wäre toll.
 

lroehrs

Neues Mitglied
10. September 2020
5
0
Vorab, vielen Dank an alle - ich bin überrascht und begeistert von der Unterstützung.
Mein Blick auf JTL ist inzwischen sogar richtig gut. :)



Der Abend verlief soweit gut, es gab zwar in der zweiten Welle einen temporären Ausfall, mit diesem haben wir jedoch aufgrund der kurzen Vorlaufzeit gerechnet.
Grund des Ausfalles scheint ein Hänger in der Datenbank gewesen zu sein - genaueres Details (Queries etc.) haben wir nicht geloggt und kann ich daher nicht melden.

Neben dem Caching Plugin haben wir noch Cloudflare aktiviert wodurch weniger als 1/4 der Request überhaupt an den Webserver ging.
Unglücklicherweise gab es dafür DNS-Probleme bei der Telekom. :/
Der Webserver war in der Spitze zu 30% ausgelastet.
 

lroehrs

Neues Mitglied
10. September 2020
5
0
Glückwunsch, als Empfehlung da Du Cloudflare erwähnst, hier solltet Ihr den Webshopabgleich von Cloudflare ausschliessen um Abgleichprobleme zu vermeiden, dazu habe ich folgende Anleitung gefunden:

https://www.sfxonline.de/blog/jtl-wawi-jtl-shop-fuer-betrieb-mit-cloudflare-cdn-konfigurieren/
Stimmt, danke für die Ergänzung! Wurde bei unserem Kunden durchgeführt, für dritte die das hier lesen aber sicherlich wichtig.
 

juergen-sfx

Offizieller Servicepartner
SPBanner
28. Februar 2013
31
1
Glückwunsch, als Empfehlung da Du Cloudflare erwähnst, hier solltet Ihr den Webshopabgleich von Cloudflare ausschliessen um Abgleichprobleme zu vermeiden, dazu habe ich folgende Anleitung gefunden:

https://www.sfxonline.de/blog/jtl-wawi-jtl-shop-fuer-betrieb-mit-cloudflare-cdn-konfigurieren/
Heh, das kenn ich irgendwo her ;)

Alternativ kann man auch eine zweite dedizierte IP dafür nutzen. Hat den Vorteil, dass man diese eventuell über einen eigenen php-fpm Pool betreiben kann. Dadurch kann man die PHP Laufzeiten für Shop und Sync getrennt optimieren (Shop kurze Laufzeit um wenig Blockaden zu haben, Sync lange laufzeit.)
 
  • Gefällt mir
Reaktionen: Rainer S
Ähnliche Themen Forum Antworten Erstelldatum des Themas
Neu Werte für Länge Breite und Höhe werden nicht in die ebay Vorlage übernommen JTL-Wawi - Fehler und Bugs 0
Neu Paypal und Shopname Plugins für JTL-Shop 2
Neu Workflow um Variationswerte (wie z.B. Größe und/oder Farbe) in Attribute (oder Merkmale) zu kopieren JTL-Workflows - Ideen, Lob und Kritik 0
Neu Versandklassen-Mapping zwischen Wawi und Shopify Shopify-Connector 0
Neu Mindest- und Maximalbestände pro Warenlager - JTL-Wawi 1.6 (Video) Umfragen rund um JTL 6
Neu Listview Angebote und Aufträge JTL-Wawi - Ideen, Lob und Kritik 1
Neu workflow für Zahlungsart änderung und nicht bezahlt setzung! JTL-Workflows - Ideen, Lob und Kritik 1
Neu Idee - Händler- und/oder Kundenbeleg automatisch drucken JTL-POS - Ideen, Lob und Kritik 0
In Bearbeitung Synchronisieren Sie Amazon und eBay Einrichtung und Installation von JTL-eazyAuction 1
Neu Druckvorlage Pickliste anpassen Artikelkomponente und Strichcode User helfen Usern - Fragen zu JTL-Wawi 0
Neu Einstellung Benutzerrecht Ausliefern und Versanddaten exportieren Arbeitsabläufe in JTL-Wawi 0
Neu Pickliste Information zu offener Menge und Gesamtmenge Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 0
Neu Artikel und Kunden neu synchronisieren Shopware-Connector 2
In Diskussion Retouren - Artikelzustände nach Eintreffen der Ware ändern und Artikelnummer neu vergeben JTL-Workflows - Ideen, Lob und Kritik 5
Neu Artikel und Vorlage kennzeichnen nach Bearbeitung Arbeitsabläufe in JTL-Wawi 7
Neu Zahlungsarten fehlen bei Firefox (und Edge) JTL-Shop - Fehler und Bugs 2
Neu Chaos bei Lager und Lieferanten Shopware-Connector 2
In Bearbeitung JTL-WAWI + FFN hängt beim Start und in Log JTL-Wawi - Fehler und Bugs 1
Neu Lieferdatum wird im Auftrag gesetzt und fehlt in Pakete JTL-Wawi - Fehler und Bugs 0
Neu Gute Alternative zum Evo Banner oder Slider? Mit Text und Buttons Templates für JTL-Shop 4
Neu es kann keine Verbindung zwischen JTL-WAWI und POS hergestellt werden. Einrichtung / Updates von JTL-POS 6
Neu Brauche Stück und Gewicht auf Auftrag und Rechnung User helfen Usern - Fragen zu JTL-Wawi 0
Neu Emails an Vorname und Nachname versenden Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 0
Neu Manuelle Auftrags und Bestellannahme verbessern JTL-Wawi - Ideen, Lob und Kritik 7
Neu Heidi SQL negative Werte addieren und einfügen Schnittstellen Import / Export 0
In Diskussion Paket ag und andere Rahmenvertragsanbieter JTL-ShippingLabels - Fehler und Bugs 0
In Bearbeitung FBA Gutschriften und Amazon Settlement Bericht Schnittstellen Import / Export 1
Neu CSV Artikel Im- und Export - kein Feld für Kurzbeschreibung vorhanden Einrichtung / Updates von JTL-POS 1
Neu Nginx Conf für Shop4 und Shop 5 Allgemeine Fragen zu JTL-Shop 6
In Bearbeitung Nachrichten und Preisvorschläge in der WAWI werden nicht mehr mir angezeigt eBay-Anbindung - Fehler und Bugs 2
Neu Hindergrundprozesse Mailen und Drucken stehen auf wartend User helfen Usern - Fragen zu JTL-Wawi 2
Neu CSV-Datei mit Beständen und Artikeln auslesen. Arbeitsabläufe in JTL-Wawi 1
Neu Auftrag aus JTL-WaWi laden und bearbeiten geht nicht. Storno ist auch ziemlich verwirrend. JTL-POS - Fehler und Bugs 1
Neu Darstellung von Bildern im Nova und Boxed Layout JTL-Shop - BETA - Feedback und Bugmeldungen 8
Neu Shipping International DHL > 1000€ und Ausfuhrbegleitdokument??? JTL-ShippingLabels - Ideen, Lob und Kritik 6
Neu Bluetooth-Verbindung stabilisieren - Epson TM-m30f und Samsung Galaxy Tab A (Android 8.1) Allgemeine Fragen zu JTL-POS 2
In Bearbeitung Problem beim Rechnung drucken, speichern und mailen (Ungültiger Versuch, VisibleFieldCount aufzurufen) Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 7
In Bearbeitung Bilder: Verknüpfung zu onlineshop entfernen und durch Ebaybilder ersetzen User helfen Usern - Fragen zu JTL-Wawi 6
Neu Artikelnamen werden in Artikelübersicht und Startseite abgeschnitten JTL-Shop - BETA - Feedback und Bugmeldungen 1
Beim Bearbeiten und Einstellen bzw. Listen von Artikeln auf ebay.co.uk tritt ständig eine Fehlermeldung auf. JTL-Wawi - Fehler und Bugs 3
Neu Für makrierte Positionen Anzahl und Werte anzeigen User helfen Usern - Fragen zu JTL-Wawi 3
Neu Shop5 RC3 und Dashboard JTL-Shop - BETA - Feedback und Bugmeldungen 1
Neu Weiße Shop- und Adminseite nach update 4.06 auf V5 RC3 JTL-Shop - BETA - Feedback und Bugmeldungen 6
Gelöst Artikel mit und ohne Lagerbestand sind im Warebkorb gleich? (war: Text ändern bei Artikel ohne Lagerbestand) Gelöste Themen in diesem Bereich 4
Gelöst pfeile und icons fehlen Gelöste Themen in diesem Bereich 3
Neu kostenloser Versand und spezieller Abholpreis Allgemeine Fragen zu JTL-Shop 1
Neu Fass und lose Ware JTL-Wawi - Fehler und Bugs 1
In Bearbeitung Variantenbilder werden bei ebay doppelt und dreifach angezeigt eBay-Anbindung - Fehler und Bugs 1
Neu Preise bei Varkombis können nicht aktualisiert und werden in Woocommerce auf 0,00 gesetzt WooCommerce-Connector 8
Neu Hinzufügen und löschen von Sprachvariablen nicht möglich JTL-Shop - Fehler und Bugs 2
Ähnliche Themen