Il nostro sito web era così lento che l’abbiamo migrato su un server il nostro sito web con CPU a 4 core, 8 GB di RAM e 8 GB di memoria swap, ma il sito è ancora molto lento. Non riesco a trovare un modo per ottimizzarlo.
Pochi annunci è un buon inizio, penso. ![]()
Wow
Wow. Non stavi scherzando! È completamente inutilizzabile. Non sono nemmeno riuscito a capire di cosa si trattasse il sito prima di arrendermi.
La velocità del singolo core della CPU e quella dell’SSD sono fattori importanti. Quanto è veloce la CPU? Non hai dischi meccanici, vero? Hai eseguito la configurazione di Discourse o modificato le impostazioni della memoria da quando hai cambiato la quantità di RAM? Hai ottimizzato le impostazioni del database? Stai usando una Installazione Standard Ufficiale di Discourse?
Ma dato che il tuo sito serve principalmente pubblicità, è impossibile capire come si comporti Discourse.
Stiamo utilizzando degli SSD nel nostro server.
Ho testato il sito con il blocco degli annunci e la velocità è ancora lenta.
Discourse è stato installato da DigitalOcean.
No, non l’ho fatto.
No!
Dovresti eseguire nuovamente discourse-setup oppure leggere i commenti in app.yml per regolare la configurazione della memoria.
Non dovresti aver bisogno di swap.
Il tuo database è molto grande?
Ho già eseguito discourse-setup, ma non ha fatto alcuna differenza sulla velocità.
Sì, abbiamo più di 27.000 argomenti sul nostro sito.
Secondo la mia esperienza, l’estensione Anteprima dell’elenco degli argomenti (Plugin) rallenta notevolmente Discourse. Puoi provare a passare ad Anteprima dell’elenco degli argomenti (TC), che si carica molto più velocemente rispetto all’estensione.
Se disattivi completamente l’Anteprima dell’elenco degli argomenti, Discourse diventerà più veloce di diverse volte. ![]()
Stiamo utilizzando un plugin personalizzato per consentire agli argomenti di mostrare comunque le immagini CDN condivise al loro interno e nei meta tag Open Graph quando vengono condivisi sui social media. Questo plugin per il supporto CDN è stato sviluppato da @fzngagan, Faizan. Esiste un modo per spostare il tuo plugin nel repository TLP TC, in modo che il sito possa caricarsi più velocemente?
@pfaffman Hai suggerimenti tecnici specifici su cosa dobbiamo fare esattamente per velocizzare il nostro database e il sito web? Immagino che su howtodiscuss.com ci siano oltre 50.000 argomenti e che sia un sito ad alto traffico.
Le mie domande:
-
Esiste una configurazione di multi-threading, CPU parallela o core che possiamo impostare in Discourse? NodeBB offre questa funzionalità per gestire l’alto traffico.
-
C’è un supporto per la cache lato server in Discourse? Dove e come configurarlo?
-
Come possiamo raggiungere un punteggio del 100% su Google PageSpeed per https://howtodiscuss.com?
-
Quali modifiche possiamo apportare al file app.yaml? Siamo su un droplet DigitalOcean con 4 vCPU e 8 GB di RAM.
-
Stiamo utilizzando Cloudflare per servire il nostro sito. Ci sono ottimizzazioni che possiamo fare lì? Quando attivo Rocket Loader di Cloudflare, il mio Discourse non funziona correttamente e restituisce errori nella console JavaScript lato client.
-
Esiste un modo per minificare automaticamente CSS, JS e HTML e abilitare la compressione gzip lato server?
-
Condividi le tue esperienze su quali ottimizzazioni avete implementato su meta.discourse.org per gestire l’alto traffico; potremmo provare le stesse.
-
Condividi le tue esperienze sulle ottimizzazioni che altri siti ad alto traffico basati su Discourse hanno provato?
Una volta riusciti a velocizzare il nostro sito, saremo felici di includerlo anche nella lista delle community Discourse di successo. Grazie.
Beh, il numero di argomenti non corrisponde al numero di post o alle dimensioni del database, ma non è così grande.
Il sito è momentaneamente offline, quindi non posso vedere il numero di post.
Ti consiglio di modificare manualmente il file app.yml, consultare le informazioni sulla configurazione presenti al suo interno e procedere con la ricostruzione. Ci sono diversi argomenti che discutono metodi per ottimizzare il database.
Potresti anche passare a uno dei nuovi droplet Digital Ocean con CPU più veloci.
Ehi, @ahmed_khan1, non rischiare tempi di inattività: anche pochi minuti di fermo possono farti perdere preziosa reputazione agli occhi di Google.
Affida il compito a un professionista, una volta per tutte. Visto che il tuo sito ha un traffico considerevole, segui il buon senso e non optare mai per soluzioni economiche.
Sto gestendo un sito con 20.000 argomenti su una macchina con 2 core e 2 GB di RAM senza problemi (anche se potrebbe non essere attivo quanto il tuo…)
Però sì, se il problema è legato all’esecuzione di molto JavaScript, le prestazioni del backend sono irrilevanti.
Hai impostato questo valore a zero?
Questo aiuterà un po’.
Puoi passare al TC per velocizzare TLP, ma ha una limitazione di rendering nei browser basati su Chromium (ecco perché non ho ancora dismesso il plugin: sto aspettando che LayoutNG aggiorni Grid CSS).
abbiamo un nuovo droplet DigitalOcean. Acquistalo semplicemente su 1
Ecco app.yml
## questo è il template del container Docker Discourse tutto-in-uno, autonomo
##
## Dopo aver apportato modifiche a questo file, DEVI ricostruire
## /var/discourse/launcher rebuild app
##
## FAI *MOLTA* ATTENZIONE DURANTE LA MODIFICA!
## I FILE YAML SONO SUPER SUPER SENSIBILI A ERRORI NELLO SPAZIAMENTO O NELL'ALLINEAMENTO!
## visita http://www.yamllint.com/ per convalidare questo file, se necessario
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
## Rimuovi il commento da queste due righe se desideri aggiungere Lets Encrypt (https)
#- "templates/web.ssl.template.yml"
#- "templates/web.letsencrypt.ssl.template.yml"
## quali porte TCP/IP deve esporre questo container?
## Se desideri che Discourse condivida una porta con un altro server web come Apache o nginx,
## consulta https://meta.discourse.org/t/17247 per i dettagli
expose:
- "2045:80" # http
# - "443:443" # https
params:
db_default_text_search_config: "pg_catalog.english"
## Imposta db_shared_buffers a un massimo del 25% della memoria totale.
## verrà impostato automaticamente da bootstrap in base alla RAM rilevata, oppure puoi sovrascriverlo
db_shared_buffers: "2048MB"
## può migliorare le prestazioni di ordinamento, ma aumenta l'utilizzo della memoria per connessione
#db_work_mem: "40MB"
## Quale revisione Git dovrebbe utilizzare questo container? (predefinito: tests-passed)
#version: tests-passed
env:
LANG: en_US.UTF-8
# DISCOURSE_DEFAULT_LOCALE: en
## Quante richieste web simultanee sono supportate? Dipende dalla memoria e dai core della CPU.
## verrà impostato automaticamente da bootstrap in base alle CPU rilevate, oppure puoi sovrascriverlo
UNICORN_WORKERS: 8
## TODO: Il nome di dominio a cui risponderà questa istanza di Discourse
## Obbligatorio. Discourse non funzionerà con un semplice numero IP.
DISCOURSE_HOSTNAME: "howtodiscuss.com"
## Rimuovi il commento se desideri che il container venga avviato con lo stesso
## nome di host (-h option) specificato sopra (predefinito "$hostname-$config")
#DOCKER_USE_HOSTNAME: true
## TODO: Elenco di email separate da virgola che diventeranno amministratori e sviluppatori
## all'iscrizione iniziale, ad esempio 'user1@example.com,user2@example.com'
DISCOURSE_DEVELOPER_EMAILS: "admin@gmail.com"
## TODO: Il server di posta SMTP utilizzato per validare nuovi account e inviare notifiche
## INDIRIZZO SMTP, nome utente e password sono obbligatori
## ATTENZIONE: il carattere '#' nella password SMTP può causare problemi!
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 # (richiesto da alcuni provider)
#DISCOURSE_NOTIFICATION_EMAIL: nobody@discourse.example.com # (indirizzo da cui inviare le notifiche)
#DISCOURSE_SMTP_ENABLE_START_TLS: true # (opzionale, predefinito true)
## Se hai aggiunto il template Lets Encrypt, rimuovi il commento qui sotto per ottenere un certificato SSL gratuito
#LETSENCRYPT_ACCOUNT_EMAIL: me@example.com
#DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456
## L'indirizzo http o https CDN per questa istanza di Discourse (configurato per il recupero)
## consulta https://meta.discourse.org/t/14857 per i dettagli
#DISCOURSE_CDN_URL: https://discourse-cdn.example.com
## Il container Docker è senza stato; tutti i dati sono archiviati in /shared
volumes:
- volume:
host: /var/discourse/shared/standalone
guest: /shared
- volume:
host: /var/discourse/shared/standalone/log/var-log
guest: /var/log
## I plugin vanno qui
## consulta https://meta.discourse.org/t/19157 per i dettagli
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 # plugin personalizzato per il supporto JAX matematico
- git clone https://github.com/discourse/discourse-solved.git # plugin personalizzato per domande e risposte e scelta della migliore risposta
- git clone https://github.com/discourse/discourse-voting.git # plugin personalizzato per votare solo i topic
- git clone https://github.com/discourse/discourse-yearly-review.git # plugin personalizzato per pubblicare automaticamente un topic annuale sull'attività del forum
- git clone https://github.com/discourse/discourse-user-notes.git # plugin personalizzato per consentire allo staff di aggiungere note su un utente
- git clone https://github.com/paviliondev/discourse-question-answer.git # plugin personalizzato non ufficiale per votazioni QnA in stile SO sui post
- git clone https://github.com/discourse/discourse-adplugin.git # plugin ufficiale personalizzato per gli annunci
- git clone https://github.com/discourse/discourse-whos-online.git # plugin personalizzato per vedere chi è online
- git clone https://github.com/paviliondev/discourse-topic-previews.git # plugin personalizzato per mostrare anteprime dei topic in modo elegante
- git clone https://github.com/paviliondev/discourse-ratings.git # plugin personalizzato per consentire la valutazione degli utenti sui topic
- git clone https://github.com/discourse/discourse-cakeday.git # plugin ufficiale per compleanni e celebrazioni della data di iscrizione
- git clone https://github.com/discourse/discourse-saved-searches.git # plugin ufficiale per le notifiche delle ricerche salvate
- git clone https://github.com/paviliondev/discourse-follow.git # plugin personalizzato per consentire agli utenti di seguire a vicenda
- git clone https://github.com/FaizanZahid/discourse-amp-htd-plugin.git # build personalizzata per il supporto AMP per HTD
- git clone https://github.com/discourse/discourse-assign.git # personalizzato per assegnare topic allo staff
- git clone https://github.com/paviliondev/x-discourse-tlp-thumbnail.git # plugin personalizzato per mostrare miniature dalle immagini CDN
## Qualsiasi comando personalizzato da eseguire dopo la costruzione
run:
- exec: echo "Inizio dei comandi personalizzati"
## Se desideri impostare l'indirizzo email 'From' per la tua prima registrazione, rimuovi il commento e modifica:
## Dopo aver ricevuto la prima email di iscrizione, rimetti il commento sulla riga. Deve essere eseguito solo una volta.
- exec: rails r "SiteSetting.notification_email='noreply@howtodiscuss.com'"
- exec: echo "Fine dei comandi personalizzati"
Penso che tu stia eseguendo più siti su questa singola istanza. Non sono sicuro di come ciò possa influire sui problemi di prestazioni.
Stiamo eseguendo solo questo sito su questo server.
Potresti aumentare db_work_mem a 100.
Potresti riscontrare problemi con il tuo reverse proxy che sta rallentando le operazioni.
Cosa mostra il mini profiler?
Puoi anche installare il plugin prometheus per ottenere ulteriori dati.
Hai provato a disattivare il plugin Who’s Online?
Ho provato, ma non vedo un grande miglioramento.
@pfaffman
ecco l’utilizzo di CPU e memoria:
Ho modificato i worker di Unicorn a 24
e i buffer di memoria a 4096 MB.
Hai controllato il lato del browser?
Ammetto che si tratta di un’istantanea, ma l’utilizzo della CPU sembra molto basso. Penso che tu abbia sovrastimato le specifiche.
L’uso della memoria è alto solo a causa del numero di unicorni. Riducili se inizia a causare problemi di swap.
Ti consiglio vivamente di esaminare i tempi di latenza nel recupero dei dati e nell’esecuzione JavaScript negli strumenti di sviluppo del browser.
La lentezza percepita potrebbe dipendere dal carico di lavoro che il browser sta svolgendo.
Dalle intestazioni HTTP sembra che tu stia utilizzando sia Ezoic che Cloudflare. È corretto? Non sono sicuro di cosa faccia esattamente, ma potrebbe essere un altro fattore che contribuisce alla lentezza percepita.
Il mio consiglio: inizia con una configurazione semplice senza alcun proxy e senza mettere il tuo Discourse dietro Cloudflare. Assicurati che sia ragionevolmente veloce e solo allora inizia a ottimizzare seguendo Enable a CDN for your Discourse oppure, se vuoi davvero usare Cloudflare, Full site CDN acceleration for Discourse.
È corretto, su questo server viene servito solo un sito, ovvero https://howtodiscuss.com, tramite NGINX. Hai qualche metodo per aumentarne la velocità?


