Das Laden von Magento-Seiten nimmt zu viel Zeit in Anspruch


10

Ich habe eine Magento-Website. Es gibt keine Benutzer (maximal 2-3 gleichzeitig).

Unser Server ist: CPU: 2000 MHz RAM: 2048 MB Festplatte: 50000 MB.

Ich habe ZendServerCE installiert (apc + memcached + Zend Optimizer + Zend Data Cache). Ich habe memcached deaktiviert, weil die Website am schlechtesten geladen wurde. Ich habe eine flache Typstruktur festgelegt, Daten neu indiziert und zwischengespeichert in der Administratorkonsole.

Also habe ich apc + Zend Optimizer + Zend Data Cache .

  1. Das erste Problem ist, dass ich zur Laufzeit überprüft habe, wie der Versand funktioniert. Der Aufruf von start_session () dauert ca. 500-700 ms. Scheint sein nicht gutes Ergebnis. Warum so lange, weiß ich nicht.

  2. Ich habe diesen gelesen: http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_key_buffer_size und optimale Optionen für meinen Server herausgefunden.

Pro Stunde:

Key_read_requests = 8887
Key_reads         = 252
Key_write_request = 187
Key_writes        = 146 

Sie sehen, dass 252/8887> 0,01, aber nicht zu viel. Es ist der optimale Wert, den ich jemals bekommen habe. Andere Ergebnisse begannen bei> 6.

Hier ist my.cnf:

key_buffer              = 48M
myisam_sort_buffer      = 2M
sort_buffer             = 2M
read_buffer_size        = 2M
join_buffer             = 2M
read_rnd_buffer         = 2M
max_allowed_packet      = 128M
thread_stack            = 192K
thread_cache_size       = 16
query_cache_type        = 1
myisam-recover         = BACKUP
max_connections        = 50
table_cache            = 256
#thread_concurrency     = 10
query_cache_limit       = 8M
query_cache_size        = 98M

3. Memcached aus irgendeinem Grund war nicht gut. Ich habe es ausgeschaltet. Der Zend-Datencache und der Zend-Optimierer funktionieren jedoch weiterhin.

4. APC scheint richtig zu sein. Das Laden der Controller-Aktion dauert zum ersten Mal 3-4 Sekunden (ich setze dort die (), um sie zu überprüfen) und zum ersten Mal dauert es 1 - 1,3 Sekunden.

5. Nach einigen Minuten habe ich mysql neu gestartet und ein gutes Ergebnis erzielt. Die Seiten wurden von 1,5 bis 2,5 Sekunden geladen. Aber jetzt (nach einigen Stunden) dauert es 6-10 Sekunden. Ich kann den Grund nicht finden.

Sehen Sie hier also eine falsche Konfiguration? Vielleicht ist mein Server nicht für Magento geeignet?

UPDATE 1: ca. 600 Kategorien und 1000 Produkte heute und ca. 20000 Kategorien (für verschiedene Webstores) und 1500-3000 Produkte in der Zukunft.

Es gibt nicht viele Attribute.

UPDATE 2 Ich habe festgestellt, dass die SSH-Konsole zu langsam arbeitet. Ich habe den Server neu gestartet und jetzt funktioniert es schnell. Es bedeutet, dass ich ein Problem mit dem RAM habe. Es gibt nicht genug Platz.

Es ist der Anfangsstatus ohne Apache:

             total       used       free     shared    buffers     cached
Mem:          2048        600       1447

UPDATE 3 Ich habe es verstanden. Jetzt wird es für 0,5-1,5 Sekunden geladen

Hier ist die Konfiguration: MySQL

[mysqld]
key_buffer_size         = 256M
tmp_table_size      = 32M
max_heap_table_size     = 32M
myisam_sort_buffer      = 4M
sort_buffer             = 4M
read_buffer_size        = 4M
join_buffer     = 4M
read_rnd_buffer     = 4M
max_allowed_packet  = 64M
thread_stack        = 192K
thread_cache_size       = 16
query_cache_type        = 1
myisam-recover          = BACKUP
max_connections         = 20
table_cache             = 1024
innodb_buffer_pool_size = 128M
query_cache_limit   = 24M
query_cache_size        = 256M

php

[apc]
apc.stat=1
apc.enabled=1
apc.optimization=0
apc.cache_by_default=1
apc.shm_segments=10
apc.shm_size=256M
apc.ttl=0
apc.user_ttl=0
apc.num_files_hint=10000
;apc.mmap_file_mask="/tmp/apc"
apc.max_file_size=5M
apc.enable_cli=1
apc.mmap_file_mask="/tmp/apc.XXXXXX"
apc.slam_defense=0
apc.user_entries_hint=10000

Alles funktioniert perfekt, aber eine Frage bleibt. APC zeigt mir diese Statistik: Geben Sie hier die Bildbeschreibung ein

Warum so kleine Treffer? Irgendwelche Ideen?


Es wäre schön, wenn Sie ein paar Zeilen über Ihre Magneto-Installation einfügen würden (z. B. Kataloggröße, Änderungen, Erweiterungen usw.).
user487772

Es gibt keine Möglichkeit, einfach eine Reihe von Konfigurationsdateien zu veröffentlichen, damit Sie Ihren Server ordnungsgemäß einrichten können. Es gibt Dutzende von Dateien; Spezifische Überarbeitungen von Änderungen auf Software- und Systemebene, die vorgenommen werden müssen, um Ihre verfügbare Hardware optimal zu nutzen.
Ben Lessani - Sonassi

Bitte beschreiben Sie, warum Sie Downvote setzen
Anthony

@ Tim Ich aktualisierte Frage
Anthony

2
Ich würde vorbeischauen xhprofund versuchen, eine Visualisierung dessen zu bekommen, was das Laden am meisten Zeit kostet. Ist dies ein Produktionsserver unter Last oder nur zum Testen?
Philwinkle

Antworten:


6

Da die Frage nicht sehr magentozentrisch zu sein scheint, ist hier meine nicht sehr magentozentrische Antwort.

OpCode-Caching und DB-Optimierungen sind eine gute Möglichkeit, Ihre Webanwendungen in gewissem Maße zu beschleunigen. Der Nutzen wird jedoch relativ moderat sein. Um einen echten Geschwindigkeitsschub zu erzielen, sollten Sie die Verwendung des Lackcaches in Betracht ziehen. Es ist Open Source, einfach zu konfigurieren und dank frei verfügbarer Module für Magento einfach in Magento zu integrieren.

Es gibt auch einen guten Artikel mit einem kurzen Überblick über die Funktionsweise: http://www.fabrizio-branca.de/make-your-magento-store-fly-using-varnish.html

Beachten Sie insbesondere die Tabelle:

Seiten / Sekunde


4
Lack ist großartig, wenn Sie bereits einen schnellen Laden haben und Ressourcen ausgleichen möchten. Aber es sollte niemals verwendet werden, um die Tatsache zu verbergen, dass ein Geschäft langsam ist. Die Seiten müssen erst noch generiert werden, sodass die Ladezeiten für Seiten immer 6 bis 10 Sekunden betragen, unabhängig davon.
Ben Lessani - Sonassi

Es scheint, als wäre es ein Memcached, das ich zuvor verwendet habe. Ich denke, ich mache etwas falsch in MySQL-Eigenschaften oder Server ist zu schwach
Anthony

2

Wenn Ihr Unternehmen von einer guten Leistung Ihres Hostings abhängig ist, warum versuchen Sie dann, den Server ohne Erfahrung zu verwalten?

Sie würden sicherlich davon profitieren, wenn Sie sich nur an einen spezialisierten Magento-Host wenden und ihn die Systemadministration übernehmen lassen, während Sie das tun, was Sie können, und Ihr Geschäft verwalten.

Wenn Sie sich Ihre Spezifikationen ansehen, haben Sie nicht genügend RAM, um einen Magento-Store zu betreiben. Es gibt eine Menge ähnlicher Fragen wie Ihre,

/server//a/400748/113375 .
/server/430565/magento-hosting-on-a-budget


Weil unser Kunde ein begrenztes Budget hat. Ich sollte für Magento Host mehr als 50 Euro pro Monat bezahlen. Wir haben ein Limit für Host 150-200 Euro pro Jahr-) Trotzdem danke für die Links
Anthony

1
Dann kann der Kunde mit einer 100% igen Optimierung einen Umsatz von ~ 20-40.000 USD / Jahr erwarten (Hosting macht 0,5-1% des Umsatzes aus). Viele Leute hier, die Ihnen alle Details und technischen Einstellungen geben können, aber Sie versuchen, mit zu wenig zu viel zu tun. Sie könnten es auf der technischen Seite zum Laufen bringen, aber auf der geschäftlichen Seite wird es flach fallen. Wenn Ihre dynamischen Seiten nicht (ohne fpc) unter 3 Sekunden geladen werden, verlieren Sie 56% der Besucher. Idealerweise zielen Sie auf 1 bis 2 Sekunden ab. Google- und Besucher-Conversions bestrafen die Website ansonsten. In Anbetracht der Situation geht eine 95-99% ige Chance von> 3s Seitenladen und / oder Website unter.

1

Ist das physische Hardware oder ein virtueller privater Server? Sie sollten Ihre Datenbank wahrscheinlich auf einen eigenen dedizierten Server verschieben. Dies gibt Ihnen auch den Vorteil, dass Sie isolieren können, ob Ihre Geschwindigkeitsprobleme bei Apache / PHP oder bei MySQL liegen.

start_session () ist langsam, was bedeutet, dass Sie wahrscheinlich unter unzureichender Hardware leiden. Ich weiß nicht, ob Ihre Technologieentscheidungen bedeuten, dass Sitzungen auf der Festplatte oder im RAM gespeichert werden, aber 500-700 ms bedeuten mit ziemlicher Sicherheit, dass sie auf der Festplatte gespeichert werden und Sie Probleme mit der E / A-Leistung haben - wahrscheinlich, weil Ihre Datenbank dies ist Auf Festplatte wechseln, weil es nicht in den Arbeitsspeicher passt ... aber das ist alles Spekulation.

Viel Glück!


Danke für deine Antwort! Ich benutze VPS. Es ist nicht sehr gut für Magento geeignet, aber ich habe die Aufgabe, es in diesem Bereich zu optimieren. Ist es möglich zu überprüfen, ob die Datenbank auf die Festplatte ausgetauscht wird?
Anthony

1
free -mwird Ihnen sagen, ob Sie überhaupt Swap verwenden, und die neuesten Versionen des topBefehls werden Ihnen sagen, ob Sie O und P drücken, um nach Swap-Verwendung zu bestellen. Andernfalls müssen Sie auf die Verwendung der Prozess-ID von mysqld mit folgendem Wert zurückgreifen: awk '/^Swap:/ { SWAP+=$2 } END { print SWAP" kB" }' /proc/$(pidof mysqld)/smaps Alle hier beschriebenen: dbasquare.com/2012/04/10/…
Ralph Tice

1

Es gibt offensichtlich keine Möglichkeit, Ihnen eine "funktionierende Konfiguration" anzuzeigen, die Ihre Leistung steigert, aber Magento versucht tatsächlich, so etwas zu tun, und veröffentlicht ein Beispiel für einen hochkonfigurierten LAMP-Stack in den Leistungs-Whitepapers. Die Methodik dieser Whitepaper gilt für CE und EE. Ich empfehle dringend, beide Whitepapers vollständig durchzulesen, da die dort vorgeschlagenen Ideen einen Großteil dieses Threads widerspiegeln und sehr spezifische Magento-Empfehlungen direkt aus der Quelle liefern: http://www.magentocommerce.com/whitepaper/


1

Aufbau

ZendFramework (Zend-Optimierer und Zend-Daten-Cache) + APC + Memcache + Nginx

funktioniert perfekt für mich.

Mehr als 30 gleichzeitige Benutzer können Seiten mit einer Länge von weniger als einer Sekunde laden (~ 0,4 s - 0,6 s).

Ich habe Nginx auf 80 Port (als Proxy) und Apache auf 8080 gesetzt.

Danke an @MattSchweers für die Links. Ich habe es vergessen. Es hilft mir, MySQL zu konfigurieren


kein Problem! Ich habe diese Whitepaper tatsächlich für einige MySQL-Optimierungen verwendet, die ich diese Woche selbst vorgenommen habe - hat gut funktioniert.

1

Meiner Erfahrung nach steigert der Litespeed-Server die Leistung um das 2-fache und ist die 1-CPU-Lizenz für 32 USD / Monat wert. Mir wurde gesagt, dass Sie nur die 1-CPU-Lizenz benötigen, da PHP in Litespeed separat ausgeführt wird.


Der Webserver ist nicht der Engpass. PHP ist, dass der Wechsel zu Litespeed überhaupt nichts ändert.
Ben Lessani - Sonassi

Obwohl ich im Allgemeinen der Meinung bin, dass Litespeed eine gute Wahl für Magento ist, wird diese Antwort das vom OP aufgeworfene Problem wahrscheinlich nicht beheben und liegt außerhalb seines angegebenen Budgets.
Preston

0

Wenn Sie mehrere Webstores und mehrere Kategorien haben, erstellt Magento im Wesentlichen eine Art Caretsian-Produkt mit Einträgen für alle Webstores, Kategorien und Produkte, was die Datenbank erheblich belasten wird. Ihre APC-Fehler sind ziemlich hoch und Sie müssen sich darum kümmern. Selbst wenn Sie APC reparieren, besteht Ihr Leistungsproblem möglicherweise weiterhin, insbesondere wenn Ihr Datenverkehr zunimmt. Um Ihre Site zu beschleunigen, müssen Sie einen Op-Cache installieren, entweder Varnish oder Full Page Cache (falls Enterprise Edition).

Magento schreibt viele Lesevorgänge in die Datenbank, sodass Sie auch versuchen können, MySQl in einem Master-Slave-Replikationsmodus zu haben, in dem alle Magento-Lesevorgänge vom Slave ausgeführt wurden, während die Schreibvorgänge beim Master ausgeführt werden.


0

Ich würde versuchen, die folgenden APC-Optionen zu ändern und zu sehen, ob die Treffer zunehmen.

apc.shm_segments 1

apc.ttl 7200

apc.user_ttl 7200

Auf einer Live-Site können Sie auch Folgendes verwenden.

apc.stat 0

Dadurch wird die APC-Überprüfung gestoppt, ob sich die Datei seit ihrer letzten Kompilierung geändert hat, was Ihnen einen schönen Geschwindigkeitsschub verleiht. Vergessen Sie nicht, Ihren APC-Cache zu leeren, wenn Sie PHP-Dateien bearbeiten.


0

Paar andere Gedanken. Vielleicht möchten Sie Ihre innodb_buffer_pool_size erhöhen, 128M können etwas niedrig sein und selbst kleine Websites können so schnell wachsen. Die Variable bestimmt, wie viel Ihrer Daten im Speicher gespeichert werden.

Magento verwendet dies für alle seine Tabellen, einschließlich der Protokolltabellen, die schnell wachsen. Sie sollten sicherstellen, dass Sie die Menge dieser Daten, die Sie speichern, begrenzen. Wenn Sie "php shell / log.php --status" über die Befehlszeile ausführen, erhalten Sie eine Vorstellung davon, wo Sie sich befinden und ob es außer Kontrolle gerät. Es gibt auch Optionen zum Bereinigen der Protokolltabellen damit.

2 GB RAM sind nicht viel, mit dem Sie arbeiten können. Sie müssen also vorsichtig sein, wo Sie Ihren Speicher zuweisen.

Ein ganzseitiger Cache + Cache Warmer kann auch dazu beitragen, dass der Katalog und die CMS-Seiten Ihrer Site schnell und einfach vorbereitet sind. Sie können unsere hier sehen: http://ecommerce.brimllc.com/full-page-cache-magento.html

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.