Unsere Website war so langsam, dass wir sie auf einen Server mit 4-Kern-CPUs, 8 GB RAM und 8 GB Swap-Speicher migriert haben. Unsere Website ist immer noch so langsam. Ich kann keinen Weg finden, meine Website zu optimieren.
Weniger Werbung ist ein guter Anfang, finde ich. ![]()
Wow
Wow. Du hast nicht übertrieben! Es ist völlig unbrauchbar. Ich wollte nicht einmal herausfinden, worum es auf der Seite geht, bevor ich aufgegeben habe.
Die Geschwindigkeit der einzelnen CPU und die SSD-Geschwindigkeit sind große Faktoren. Wie schnell ist die CPU? Hast du keine rotierenden Festplatten? Hast du die Discourse-Einrichtung ausgeführt oder die Speichereinstellungen geändert, seit du die RAM-Menge geändert hast? Hast du die Datenbankeinstellungen angepasst? Verwendest du eine offizielle Standardinstallation von Discourse?
Da deine Website jedoch hauptsächlich Werbung ausspielt, ist es unmöglich zu sagen, wie die Discourse-Performance ist.
Sie sollten entweder discourse-setup erneut ausführen oder die Kommentare in app.yml lesen, um die Speicherkonfiguration anzupassen.
Sie sollten keinen Swap benötigen.
Ist Ihre Datenbank sehr groß?
Ich habe discourse-setup bereits ausgeführt, aber das hat nichts an der Geschwindigkeit geändert.
Ja, wir haben mehr als 27.000 Themen auf unserer Seite.
Aus meiner Erfahrung verlangsamt das Plugin „Topic List Previews
Wir nutzen ein benutzerdefiniertes Plugin, damit Themen weiterhin die über sie geteilten CDN-Bilder anzeigen können, die auch in den Meta-OG-Tags enthalten sind, falls sie in sozialen Medien geteilt werden. Dieses CDN-Support-Plugin wurde von @fzngagan (Faizan) entwickelt. Gibt es eine Möglichkeit, Ihr geschriebenes Plugin in den TLP TC (Topic List Previews Topic Collection) zu übernehmen, damit die Seite schneller lädt?
@pfaffman Haben Sie spezifische technische Vorschläge, was genau wir tun müssen, um unsere Datenbank und unsere Website zu beschleunigen? Ich gehe davon aus, dass howtodiscuss.com über 50.000+ Themen hat und eine Website mit hohem Traffic ist.
Meine Fragen:
-
Gibt es eine Mehrprozess- oder Parallel-CPU-/Kern-Konfiguration, die wir in Discourse einrichten können? NodeBB bietet dies zur Bewältigung von hohem Traffic.
-
Gibt es eine serverseitige Caching-Unterstützung in Discourse? Wo und wie wird diese konfiguriert?
-
Wie können wir bei https://howtodiscuss.com eine Google PageSpeed-Bewertung von 100 % erreichen?
-
Welche Änderungen können wir in der app.yaml-Datei vornehmen? Wir nutzen einen DigitalOcean-Droplet mit 4 VCPU und 8 GB RAM.
-
Wir nutzen Cloudflare, um unsere Seite auszuliefern. Welche Optimierungen können wir dort vornehmen? Wenn ich den Rocket Loader von Cloudflare aktiviere, funktioniert Discourse nicht richtig und es treten Fehler in der JavaScript-Konsole auf der Client-Seite auf.
-
Gibt es eine Möglichkeit, CSS, JS und HTML automatisch zu minifizieren und serverseitig die gzip-Komprimierung zu aktivieren?
-
Bitte teilen Sie Einblicke darüber, welche Optimierungen Sie auf meta.discourse.org vorgenommen haben, um mit höherem Traffic zurechtzukommen. Wir könnten dieselben Maßnahmen ausprobieren.
-
Bitte teilen Sie Einblicke über Optimierungen, die andere Websites mit hohem Traffic auf Discourse ausprobiert haben.
Sobald wir unsere Website beschleunigen können, sind wir gerne bereit, unsere Seite auch in die Liste der erfolgreichen Discourse-Communitys aufzunehmen. Vielen Dank.
Nun, die Anzahl der Themen entspricht nicht der Anzahl der Beiträge oder der Größe der Datenbank, aber das ist nicht so groß.
Die Website ist derzeit offline, sodass ich die Anzahl der Beiträge nicht einsehen kann.
Ich empfehle dir, die Datei app.yml manuell zu bearbeiten, die dort enthaltenen Optimierungsinformationen zu prüfen und den Neuaufbau durchzuführen. Es gibt mehrere Themen, die Methoden zur Optimierung der Datenbank diskutieren.
Du könntest auch auf einen der neuen Digital Ocean Droplets mit schnellerer CPU wechseln.
Hey, @ahmed_khan1, riskiere keine Ausfallzeiten. Schon ein paar Minuten Downtime können dir in den Augen von Google wertvollen Ruf kosten.
Lass das lieber von einem Profi erledigen – ein für alle Mal. Wie ich sehe, hat deine Site beträchtlichen Traffic. Also sei vernünftig und gehe niemals den billigen Weg.
Ich betreibe eine Seite mit 20.000 Themen auf einer Maschine mit 2 Kernen und 2 GB RAM ohne Probleme (wenn auch vielleicht nicht so aktiv wie eure …)
Aber ja, wenn es ein Problem mit der Ausführung von viel JavaScript ist, dann ist die Backend-Leistung irrelevant.
Hast du das hier auf Null gesetzt?
Das wird etwas helfen.
Du kannst zum TC wechseln, um TLP zu beschleunigen, aber es gibt eine Rendering-Einschränkung in Chromium-basierten Browsern (daher habe ich das Plugin bisher noch nicht außer Betrieb genommen; ich warte auf das Upgrade von LayoutNG auf Grid CSS).
Wir haben einen neuen DigitalOcean-Droplet. Einfach auf 1 kaufen.
Hier ist app.yml
## Dies ist die All-in-One, eigenständige Discourse Docker-Container-Vorlage
##
## Nach Änderungen an dieser Datei MÜSSEN Sie neu erstellen
## /var/discourse/launcher rebuild app
##
## SEIEN SIE *SEHR* VORSICHTIG BEIM BEARBEITEN!
## YAML-DATEIEN SIND EXTREM EXTREM EMPFINDLICH GEGENÜBER FEHLERN IN LEERZEICHEN ODER AUSRICHTUNG!
## Besuchen Sie http://www.yamllint.com/, um diese Datei bei Bedarf zu validieren
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
## Entfernen Sie das Kommentarzeichen bei diesen beiden Zeilen, wenn Sie Lets Encrypt (https) hinzufügen möchten
#- "templates/web.ssl.template.yml"
#- "templates/web.letsencrypt.ssl.template.yml"
## Welche TCP/IP-Ports soll dieser Container freigeben?
## Wenn Sie möchten, dass Discourse einen Port mit einem anderen Webserver wie Apache oder nginx teilt,
## siehe https://meta.discourse.org/t/17247 für Details
expose:
- "2045:80" # http
# - "443:443" # https
params:
db_default_text_search_config: "pg_catalog.english"
## Setzen Sie db_shared_buffers auf maximal 25 % des gesamten Arbeitsspeichers.
## wird automatisch durch Bootstrap basierend auf dem erkannten RAM festgelegt, oder Sie können es überschreiben
db_shared_buffers: "2048MB"
## kann die Sortierleistung verbessern, erhöht aber den Speicherverbrauch pro Verbindung
#db_work_mem: "40MB"
## Welche Git-Revision soll dieser Container verwenden? (Standard: tests-passed)
#version: tests-passed
env:
LANG: en_US.UTF-8
# DISCOURSE_DEFAULT_LOCALE: en
## Wie viele gleichzeitige Webanfragen werden unterstützt? Hängt vom Arbeitsspeicher und den CPU-Kernen ab.
## wird automatisch durch Bootstrap basierend auf den erkannten CPUs festgelegt, oder Sie können es überschreiben
UNICORN_WORKERS: 8
## TODO: Der Domainname, auf den diese Discourse-Instanz antworten soll
## Erforderlich. Discourse funktioniert nicht mit einer reinen IP-Nummer.
DISCOURSE_HOSTNAME: "howtodiscuss.com"
## Kommentarzeichen entfernen, wenn der Container mit dem gleichen
## Hostnamen (-h-Option) wie oben angegeben gestartet werden soll (Standard: "$hostname-$config")
#DOCKER_USE_HOSTNAME: true
## TODO: Liste der durch Kommas getrennten E-Mail-Adressen, die bei der ersten Registrierung zu Administratoren und Entwicklern werden
## Beispiel: 'user1@example.com,user2@example.com'
DISCOURSE_DEVELOPER_EMAILS: "admin@gmail.com"
## TODO: Der SMTP-Mailserver, der zur Validierung neuer Konten und zum Senden von Benachrichtigungen verwendet wird
## SMTP-Adresse, Benutzername und Passwort sind erforderlich
## WARNUNG: Das Zeichen '#' im SMTP-Passwort kann Probleme verursachen!
DISCOURSE_SMTP_ADDRESS: smtp-relay.smtp.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: admin@gmail.com
DISCOURSE_SMTP_PASSWORD: smtp_password
#DISCOURSE_SMTP_DOMAIN: discourse.example.com # (von einigen Anbietern erforderlich)
#DISCOURSE_NOTIFICATION_EMAIL: nobody@discourse.example.com # (Adresse, von der Benachrichtigungen gesendet werden)
#DISCOURSE_SMTP_ENABLE_START_TLS: true # (optional, Standard: true)
## Wenn Sie die Lets Encrypt-Vorlage hinzugefügt haben, entfernen Sie unten das Kommentarzeichen, um ein kostenloses SSL-Zertifikat zu erhalten
#LETSENCRYPT_ACCOUNT_EMAIL: me@example.com
#DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456
## Die http- oder https-CDN-Adresse für diese Discourse-Instanz (konfiguriert zum Abrufen)
## siehe https://meta.discourse.org/t/14857 für Details
#DISCOURSE_CDN_URL: https://discourse-cdn.example.com
## Der Docker-Container ist zustandslos; alle Daten werden in /shared gespeichert
volumes:
- volume:
host: /var/discourse/shared/standalone
guest: /shared
- volume:
host: /var/discourse/shared/standalone/log/var-log
guest: /var/log
## Plugins gehen hierhin
## siehe https://meta.discourse.org/t/19157 für Details
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/discourse/docker_manager.git
- git clone https://github.com/discourse/discourse-sitemap.git
- git clone https://github.com/discourse/discourse-math.git # benutzerdefiniertes Plugin für math JAX-Unterstützung
- git clone https://github.com/discourse/discourse-solved.git # benutzerdefiniertes Plugin für Fragen und Antworten und Auswahl der besten Antwort
- git clone https://github.com/discourse/discourse-voting.git # benutzerdefiniertes Plugin für Abstimmungen nur zu Themen
- git clone https://github.com/discourse/discourse-yearly-review.git # benutzerdefiniertes Plugin zum automatischen Erstellen eines jährlichen Beitrags zur Forenaktivität
- git clone https://github.com/discourse/discourse-user-notes.git # benutzerdefiniertes Plugin, um Mitarbeitern das Hinzufügen von Notizen zu einem Benutzer zu ermöglichen
- git clone https://github.com/paviliondev/discourse-question-answer.git # benutzerdefiniertes, nicht offizielles Plugin für SO-artige QnA-Abstimmungen bei Beiträgen
- git clone https://github.com/discourse/discourse-adplugin.git # benutzerdefiniertes offizielles Plugin für Werbung
- git clone https://github.com/discourse/discourse-whos-online.git # benutzerdefiniertes Plugin, um zu sehen, wer online ist
- git clone https://github.com/paviliondev/discourse-topic-previews.git # benutzerdefiniertes Plugin zum schönen Anzeigen von Themen-Vorschauen
- git clone https://github.com/paviliondev/discourse-ratings.git # benutzerdefiniertes Plugin, um Benutzern Bewertungen zu Themen zu ermöglichen
- git clone https://github.com/discourse/discourse-cakeday.git # offizielles Plugin für Geburtstage und Jubiläumsfeiern
- git clone https://github.com/discourse/discourse-saved-searches.git # offizielles Plugin für Benachrichtigungen zu gespeicherten Suchanfragen
- git clone https://github.com/paviliondev/discourse-follow.git # benutzerdefiniertes Plugin, um Benutzern zu ermöglichen, einander zu folgen
- git clone https://github.com/FaizanZahid/discourse-amp-htd-plugin.git # benutzerdefinierte AMP-Unterstützung für HTD
- git clone https://github.com/discourse/discourse-assign.git # benutzerdefiniert zum Zuweisen von Themen an Mitarbeiter
- git clone https://github.com/paviliondev/x-discourse-tlp-thumbnail.git # benutzerdefiniertes Plugin zum Anzeigen von Thumbnails aus CDN-Bildern
## Alle benutzerdefinierten Befehle, die nach dem Erstellen ausgeführt werden sollen
run:
- exec: echo "Beginn der benutzerdefinierten Befehle"
## Wenn Sie die 'Von'-E-Mail-Adresse für Ihre erste Registrierung festlegen möchten, entfernen Sie das Kommentarzeichen und ändern Sie:
## Nach Erhalt der ersten Anmelde-E-Mail das Kommentarzeichen wieder hinzufügen. Es muss nur einmal ausgeführt werden.
- exec: rails r "SiteSetting.notification_email='noreply@howtodiscuss.com'"
- exec: echo "Ende der benutzerdefinierten Befehle"
Ich vermute, Sie hosten mehrere Websites auf dieser einzelnen Instanz. Ich bin mir nicht sicher, wie sich das auf die Leistungsprobleme auswirken würde.
Wir betreiben nur diese eine Seite auf diesem Server.
Du könntest db_work_mem auf 100 erhöhen.
Es könnte Probleme mit deinem Reverse-Proxy geben, der die Leistung verlangsamt.
Was zeigt der Mini-Profiler an?
Du kannst auch das Prometheus-Plugin installieren, um weitere Daten zu erhalten.
Haben Sie bereits versucht, das Plugin ‘Wer ist online’ zu deaktivieren?
Ich habe es versucht, aber ich sehe keine große Verbesserung.
@pfaffman
hier sind die CPU- und Speicherauslastung:
Ich habe die Unicorn-Worker auf 24 geändert
und die Memory-Puffer auf 4096 MB.
Hast du schon die Browserseite geprüft?
Zugegeben, das ist nur eine Momentaufnahme, aber deine CPU-Auslastung wirkt sehr gering. Ich denke, du übertreibst mit der Hardware.
Der Speicherverbrauch ist nur aufgrund der Anzahl der Unicorns hoch. Reduziere diese, falls es zu stark zum Auslagern (Swap) kommt.
Ich würde auf jeden Fall die Datenabrufzeiten und JavaScript-Latenzen in den Entwicklertools des Browsers untersuchen.
Die wahrgenommene Langsamkeit könnte an der Menge der Arbeit liegen, die der Browser verrichtet.
Laut den HTTP-Headern scheint es, als würdet ihr sowohl Ezoic als auch Cloudflare nutzen. Stimmt das? Ich bin mir nicht sicher, was das bewirkt, aber das könnte ein weiterer Faktor für die wahrgenommene Langsamkeit sein.
Meine Empfehlung: Beginnt mit einer einfachen Einrichtung ohne Proxies oder ohne, dass ihr euren Discourse hinter Cloudflare stellt. Stellt sicher, dass es angemessen schnell läuft, und optimiert erst dann, indem ihr Enable a CDN for your Discourse oder, wenn ihr Cloudflare unbedingt nutzen wollt, Full site CDN acceleration for Discourse befolgt.
Das ist korrekt, nur eine einzige Seite, nämlich https://howtodiscuss.com, wird über diesen Server via NGINX bereitgestellt. Haben Sie Vorschläge, wie man ihre Geschwindigkeit steigern kann?


