Performance Optimierung ungecachter Seiten

Problem:
Suchergebnisliste und Filterergebnisliste laden dauert zu lange. (48 Artikel/Seite)
Uncached Artikeldetailseite laden dauert zu lange. (cached geht schnell)
Was lange dauert, ist laut Netzwerkanalyse das HTML, für 20kb etwa 5 Sek bei Artikeldetail und 10 Sek bei Suchergebnisseite.
Scripte und Images etc. laden nach dem HTML sehr schnell innerhalb von Millisekunden.
Seiten aus dem Cache sind schnell, aber wir können nicht alles cachen weil der Shop recht groß ist.

Frage:
Welche Optionen wären sinnvoll für eine Performancesteigerung?
Anpassungen Konfiguration Webserver (welche …?)
Anpassungen Konfiguration Shopware (welche …?)
Einsatz von Elastic-Search (gleicher Server / separater Server?)
Upgrade Webserver (Prozessorkerne?)

Shop:
Shopware: 5.5.10
280.000 Artikel, davon 270.000 aktiv (keinen Nutzung von Varianten)
Kategorien: ca. 300
Kundengruppen: ca. 2000
Kunden: ca. 2000

Daten:
Größe: ca. 1GB (MariaDB)
Search-Index: ca. 2 Mio Datensätze
Artikelpreise: ca. 1 Mio Datensätze
Search-Keywords: ca 700.000 Datensätze

Caching:
SEO-Indexer: 1x pro Stunde per Cronjob
Search-Indexer: 1x am Tag per Cronjob um 0.30 Uhr
Cache-Clear: 1x am Tag per Cronjob um 1.00 Uhr
Cache-Warmup: 1x am Tag per Cronjob um 1.30 Uhr, dauert ca. 2,5h (Artikeldetailseiten sind ausgeschlossen, sonst würde der komplette Warmup mehrere Tage dauern) (httpdocs/bin/console ‚sw:warm:http:cache‘ ‚-k‘ ‚-o‘ ‚-g‘ ‚-m‘ ‚-t‘ ‚-x‘ ‚-b‘ ‚2‘)

Cache-Lebensdauer:
SEO-Index: 1Tag (86400 sek)
Search-Index: 1Tag
http-Cache: aktiv
Auto-Invalidierung: aktiv
Alle cached Controller sind auf 1 Tag eingestellt
Nicht cached Controller sind widgets/lastarticles[detail], widgets/compare[compare], frontend/listing[price], frontend/index[price], widgets/listing[price], widgets/checkout[checkout,slt,price], frontend/detail[price]

Shopware-Cronjobs:
Clearing (täglich)
EmailNotification (täglich)
CleanupSignatures (täglich)
RefreshCustomerStreams (täglich)
OptInCleanUp (täglich)
RegistrationCleanup (täglich)
AutoImport (täglich)
SitemapGeneration (täglich)
Pluginspezifische Crons (stündlich/ täglich)

Monitoring:
CPU-Auslastung gesamt geht beim Warmup nachts auf ca. 25-50%.
Bei SEO-index geht es stündlich eher punktuell auf 25%. Sonst immer unter 10%.
Auslastung durch User im Frontend: vernachlässigbar, da aktuell noch nur 1-10 Kunden am Tag im Shop.
Invalidierung: es werden nur wenige Artikel am Tag aktualisiert (0 bis 100).

Server:
Managed vServer
4 Kerne
16G Ram
100G SSD (NVMe)
Apache (ngix verfügbar, macht aber testweise keinen Unterschied)
APCu aktiv
ZendOpcache aktiv
PHP 7.2.34
PHP Memory-Limit: 8G
Server API: FPM/FastCGI (Apache) (FastCGi und FPM ngix wäre möglich, macht aber testweise keinen Unterschied in der Performance)

Wäre super wenn ihr hier ein paar Tipps in die richtige Richtung für mich hättet!

Generell empfehle ich ein Shop Update um auch aktuelle PHP- und MySQL-Versionen nutzen zu können. Das ist schon mal die halbe Miete (ein Sprichwort).

Ja, Shop-update auf 5.7.7 ist parallel gerade in Arbeit. Dauert aber noch, wegen der vielen Plugins und Anpassungen die gerade quergecheckt werden und wo des Updates halber „einige“ Anpassungen nötig sind. Und 6.x ist leider noch auf der langen Bank.
Interessant wären zusätzlich zum Update mögliche Optimierungsoptionen bzw. an welchen Ecken weiterzudenken wäre die kurzfristig mit der bestehenden Version schon einen Gewinn bringen.

Neben Performance-Zuwachs durch aktuelle Versionen mitzunehmen, wie von R4M empfohlen, wäre ein Tipp von mir auf ein deaktiviertes open_basedir zu prüfen.

@ ProjektEM

Du kommst mit Deiner Ausgangssituation mit herkömmlichen Mitteln nicht weit. Da kannst Du einen noch so leistungsstarken Server verwenden und Du wirst nie eine so gravierende Verbesserung bekommen. Das heißt im Gegenzug aber nicht, dass eine Lösung deswegen sehr umfangreich sein muss. Es gibt eine vergleichsweise einfache Lösung dafür, sodass es selbst bei der Menge Deiner Artikel möglich ist die Ladezeit für das Hauptdokument auf unter 30ms zu bringen. Wie so etwas aussehen kann, zeige ich Dir gerne in einer Demo dafür. Meld Dich einfach mal per PM, dann bekommst einen Link zu der Demo.

1 „Gefällt mir“

Hier war eh schon das gesamte Shopverzeichnis eingegeben, /var/www/vhosts/xxxx.de/:/tmp/, setzen auf none hat leider keine Millisekunde gebracht.