Nosso site estava tão lento que o migrarmos para um servidor com 4 núcleos de CPU, 8 GB de RAM e 8 GB de memória swap. Mesmo assim, nosso site continua muito lento. Não consigo encontrar uma maneira de otimizar meu site.
Menos anúncios é um bom começo, acho. ![]()
Uau
Uau. Você não estava brincando! Está completamente inutilizável. Eu mal consegui descobrir do que se tratava o site antes de desistir.
A velocidade do único núcleo da CPU e a velocidade do SSD são fatores importantes. Quão rápida é a CPU? Você não tem discos magnéticos giratórios, certo? Você executou a configuração do Discourse ou alterou as configurações de memória desde que mudou a quantidade de RAM? Você ajustou as configurações do banco de dados? Você está usando uma Instalação Padrão Oficial do Discourse?
Mas, como seu site serve principalmente anúncios, é impossível dizer como é o desempenho do Discourse.
Você deve executar o discourse-setup novamente ou ler os comentários no app.yml para ajustar a configuração de memória.
Você não deve precisar de nenhuma área de swap.
Seu banco de dados é muito grande?
Já executei o discourse-setup, mas isso não fez nenhuma diferença na velocidade.
Sim, temos mais de 27.000 tópicos em nosso site.
Na minha experiência, o Plugin Topic List Previews (Plugin) deixa o Discourse significativamente mais lento. Você pode tentar alternar para o Topic List Previews (TC), que carrega muito mais rápido do que o Plugin.
Se você desativar completamente o Topic List Previews, o Discourse ficará várias vezes mais rápido. ![]()
Estamos usando um plugin personalizado para permitir que os tópicos ainda exibam as imagens do CDN compartilhadas neles, nas meta tags OG, caso sejam compartilhados em redes sociais. Esse plugin de suporte a CDN foi desenvolvido por @fzngagan, Faizan. Você tem alguma maneira de migrar seu plugin escrito para o TLP TC, para que o site possa carregar mais rápido?
@pfaffman Você tem alguma sugestão técnica específica sobre o que exatamente precisamos fazer para acelerar nosso banco de dados e site? Estou assumindo que, no howtodiscuss.com, há mais de 50 mil tópicos e é um site de alto tráfego.
Minhas perguntas:
-
Existe alguma configuração de multithreading, CPU paralela ou núcleos que possamos configurar no Discourse? O NodeBB oferece isso para lidar com alto tráfego.
-
Há suporte a cache no lado do servidor no Discourse? Onde e como configurá-lo?
-
Como podemos atingir 100% na pontuação do Google PageSpeed para https://howtodiscuss.com?
-
Quais alterações podemos fazer no arquivo app.yaml? Estamos em um droplet da DigitalOcean com 4 vCPUs e 8 GB de RAM.
-
Estamos usando o Cloudflare para servir nosso site. Há alguma otimização que possamos fazer lá? Quando ativo o Rocket Loader do Cloudflare, meu Discourse não funciona corretamente e apresenta erros no console JavaScript do lado do cliente.
-
Há alguma maneira de minificar automaticamente CSS, JS e HTML, e ativar a compressão gzip no lado do servidor?
-
Por favor, compartilhe insights sobre quais otimizações vocês fizeram no meta.discourse.org para lidar com alto tráfego, para que possamos tentar as mesmas.
-
Por favor, compartilhe insights sobre otimizações que outros sites de alto tráfego no Discourse já testaram.
Assim que conseguirmos acelerar nosso site, ficaremos felizes em permitir que vocês incluam nosso site também na lista de comunidades de sucesso do Discourse. Obrigado.
Bem, o número de tópicos não é o mesmo que o número de posts ou o tamanho do banco de dados, mas isso não é tão grande.
O site está fora do ar agora, então não consigo ver o número de posts.
Recomendo que edite o app.yml manualmente, verifique as informações de ajuste lá e reconstrua. Existem vários tópicos que discutem maneiras de otimizar o banco de dados.
Você também pode migrar para um dos novos droplets com CPU mais rápida da Digital Ocean.
Olá, @ahmed_khan1! Não arrisque nenhuma queda de serviço; mesmo alguns minutos fora do ar podem custar sua preciosa reputação aos olhos do Google.
Contrate um profissional para resolver isso de uma vez por todas. Como vejo que seu site tem um tráfego considerável, siga a lógica e nunca opte pelo mais barato.
Estou rodando um site com 20.000 tópicos em uma máquina de 2 núcleos e 2GB de RAM sem problemas (mas talvez não seja tão ativo quanto o seu…)
Mas, sim, se o problema for a execução de muito JavaScript, o desempenho do back-end é irrelevante.
Você configurou isso como zero?
Isso ajudará um pouco.
Você pode migrar para o TC para acelerar o TLP, mas ele tem uma limitação de renderização em navegadores baseados no Chromium (por isso ainda não desativei o plugin; estou aguardando o LayoutNG para atualizar o Grid CSS).
Temos um novo droplet da DigitalOcean. Basta comprá-lo em 1
Aqui está app.yml
## este é o modelo de contêiner Docker Discourse tudo-em-um e independente
##
## Após fazer alterações neste arquivo, você DEVE reconstruir
## /var/discourse/launcher rebuild app
##
## TENHA *MUITO* CUIDADO AO EDITAR!
## ARQUIVOS YAML SÃO SUPER SUPER SENSÍVEIS A ERROS DE ESPAÇAMENTO OU ALINHAMENTO!
## visite http://www.yamllint.com/ para validar este arquivo conforme necessário
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
## Descomente estas duas linhas se quiser adicionar o Lets Encrypt (https)
#- "templates/web.ssl.template.yml"
#- "templates/web.letsencrypt.ssl.template.yml"
## quais portas TCP/IP este contêiner deve expor?
## Se você quiser que o Discourse compartilhe uma porta com outro servidor web como Apache ou nginx,
## consulte https://meta.discourse.org/t/17247 para detalhes
expose:
- "2045:80" # http
# - "443:443" # https
params:
db_default_text_search_config: "pg_catalog.english"
## Defina db_shared_buffers para no máximo 25% da memória total.
## será definido automaticamente pelo bootstrap com base na RAM detectada, ou você pode sobrescrever
db_shared_buffers: "2048MB"
## pode melhorar o desempenho de ordenação, mas aumenta o uso de memória por conexão
#db_work_mem: "40MB"
## Qual revisão do Git este contêiner deve usar? (padrão: tests-passed)
#version: tests-passed
env:
LANG: en_US.UTF-8
# DISCOURSE_DEFAULT_LOCALE: en
## Quantas solicitações web simultâneas são suportadas? Depende da memória e dos núcleos da CPU.
## será definido automaticamente pelo bootstrap com base nas CPUs detectadas, ou você pode sobrescrever
UNICORN_WORKERS: 8
## TODO: O nome de domínio ao qual esta instância do Discourse responderá
## Obrigatório. O Discourse não funcionará com um endereço IP puro.
DISCOURSE_HOSTNAME: "howtodiscuss.com"
## Descomente se quiser que o contêiner seja iniciado com o mesmo
## nome de hostname (opção -h) especificado acima (padrão "$hostname-$config")
#DOCKER_USE_HOSTNAME: true
## TODO: Lista de e-mails separados por vírgula que serão feitos administradores e desenvolvedores
## no cadastro inicial, exemplo 'user1@example.com,user2@example.com'
DISCOURSE_DEVELOPER_EMAILS: "admin@gmail.com"
## TODO: O servidor de e-mail SMTP usado para validar novas contas e enviar notificações
## ENDEREÇO SMTP, nome de usuário e senha são obrigatórios
## AVISO: o caractere '#' na senha SMTP pode causar problemas!
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 # (obrigatório para alguns provedores)
#DISCOURSE_NOTIFICATION_EMAIL: nobody@discourse.example.com # (endereço para enviar notificações)
#DISCOURSE_SMTP_ENABLE_START_TLS: true # (opcional, padrão true)
## Se você adicionou o modelo Lets Encrypt, descomente abaixo para obter um certificado SSL gratuito
#LETSENCRYPT_ACCOUNT_EMAIL: me@example.com
#DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456
## O endereço http ou https do CDN para esta instância do Discourse (configurado para buscar)
## consulte https://meta.discourse.org/t/14857 para detalhes
#DISCOURSE_CDN_URL: https://discourse-cdn.example.com
## O contêiner Docker é sem estado; todos os dados são armazenados em /shared
volumes:
- volume:
host: /var/discourse/shared/standalone
guest: /shared
- volume:
host: /var/discourse/shared/standalone/log/var-log
guest: /var/log
## Plugins vão aqui
## consulte https://meta.discourse.org/t/19157 para detalhes
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 personalizado para suporte a JAX matemático
- git clone https://github.com/discourse/discourse-solved.git # plugin personalizado para perguntas e respostas e escolha da melhor resposta
- git clone https://github.com/discourse/discourse-voting.git # plugin personalizado para votação em tópicos apenas
- git clone https://github.com/discourse/discourse-yearly-review.git # plugin personalizado para publicar automaticamente um tópico anual de atividade do fórum
- git clone https://github.com/discourse/discourse-user-notes.git # plugin personalizado para permitir que a equipe adicione notas sobre um usuário
- git clone https://github.com/paviliondev/discourse-question-answer.git # plugin personalizado não oficial para votação estilo SO em posts
- git clone https://github.com/discourse/discourse-adplugin.git # plugin oficial personalizado para anúncios
- git clone https://github.com/discourse/discourse-whos-online.git # plugin personalizado para ver quem está online
- git clone https://github.com/paviliondev/discourse-topic-previews.git # plugin personalizado para mostrar pré-visualizações de tópicos de forma agradável
- git clone https://github.com/paviliondev/discourse-ratings.git # plugin personalizado para permitir avaliação de usuários em tópicos
- git clone https://github.com/discourse/discourse-cakeday.git # plugin oficial para celebrações de aniversários e datas de inscrição
- git clone https://github.com/discourse/discourse-saved-searches.git # plugin oficial para notificações de buscas salvas
- git clone https://github.com/paviliondev/discourse-follow.git # plugin personalizado para permitir que usuários se sigam mutuamente
- git clone https://github.com/FaizanZahid/discourse-amp-htd-plugin.git # build personalizado com suporte AMP para HTD
- git clone https://github.com/discourse/discourse-assign.git # personalizado para atribuir tópicos à equipe
- git clone https://github.com/paviliondev/x-discourse-tlp-thumbnail.git # plugin personalizado para mostrar miniaturas de imagens do CDN
## Quaisquer comandos personalizados para executar após a construção
run:
- exec: echo "Início dos comandos personalizados"
## Se quiser definir o endereço de e-mail 'De' para seu primeiro registro, descomente e altere:
## Após receber o primeiro e-mail de inscrição, recomente a linha. Só precisa ser executado uma vez.
- exec: rails r "SiteSetting.notification_email='noreply@howtodiscuss.com'"
- exec: echo "Fim dos comandos personalizados"
Acho que você está rodando vários sites nesta única instância. Não tenho certeza de como isso afetaria os problemas de desempenho.
Estamos rodando apenas este site neste servidor.
Você pode aumentar o db_work_mem para 100.
Você pode ter problemas com seu proxy reverso que está deixando tudo mais lento.
O que o mini profiler mostra?
Você também pode instalar o plugin do Prometheus para obter mais dados.
Você já tentou desativar o plugin Who’s Online?
Tentei, mas não vejo uma grande melhoria
@pfaffman
aqui estão o uso de CPU e memória
mudei os workers do unicorn para 24
e os buffers de memória para 4096MB
Você já analisou o lado do navegador?
Embora isso seja apenas um instantâneo, sua utilização de CPU parece muito baixa. Acredito que você está superdimensionando.
O uso de memória está alto apenas devido ao número de unicórnios. Reduza-os se começar a impactar negativamente a troca para o disco (swap).
Com certeza, verifique as latências de recuperação de dados e JavaScript nas ferramentas de desenvolvimento do navegador.
A lentidão percebida pode ser devido à quantidade de trabalho que o navegador está realizando.
Pelos cabeçalhos HTTP, parece que você está usando o Ezoic e o Cloudflare. É isso mesmo? Não tenho certeza do que isso faz, mas isso pode ser outro fator para a lentidão percebida.
Minha recomendação: Comece com uma configuração simples, sem nenhum proxy ou colocando seu Discourse atrás do Cloudflare. Certifique-se de que seja razoavelmente rápido e só então comece a otimizar seguindo Enable a CDN for your Discourse ou, se você realmente quiser usar o Cloudflare, Full site CDN acceleration for Discourse.
Isso está correto, apenas 1 site, que é https://howtodiscuss.com, está sendo servido neste servidor via NGINX. Você tem alguma maneira de aumentar sua velocidade?


