Nuestro sitio web era tan lento que lo migramos a un servidor nuestro sitio web con CPUs de 4 núcleos, 8 GB de RAM y 8 GB de memoria de intercambio, pero nuestro sitio web sigue siendo muy lento. No puedo encontrar una forma de optimizar mi sitio.
Menos publicidad es un buen comienzo, creo. ![]()
¡Vaya!
¡Vaya! No mentías. Es completamente inutilizable. No pude ni siquiera averiguar de qué trataba el sitio antes de rendirme.
La velocidad de un solo núcleo de la CPU y la velocidad del SSD son factores importantes. ¿Qué tan rápido es el CPU? ¿No tienes discos mecánicos giratorios, verdad? ¿Has ejecutado la configuración de Discourse o cambiado la configuración de memoria desde que modificaste la cantidad de RAM? ¿Has ajustado la configuración de la base de datos? ¿Estás utilizando una instalación estándar oficial de Discourse?
Pero dado que tu sitio sirve principalmente anuncios, es imposible determinar cómo es el rendimiento de Discourse.
Estamos usando SSDs en nuestro servidor.
He probado el sitio con un bloqueador de anuncios y la velocidad sigue siendo lenta.
Discourse fue instalado por DigitalOcean.
No, no lo he hecho.
¡No!
Deberías ejecutar nuevamente discourse-setup o leer los comentarios en app.yml para ajustar la configuración de memoria.
No deberías necesitar ninguna memoria swap.
¿Es muy grande tu base de datos?
Ya ejecuté discourse-setup, pero no hizo ninguna diferencia en la velocidad.
Sí, tenemos más de 27000 temas en nuestro sitio.
En mi experiencia, las Vistas Previas de la Lista de Temas (Plugin) ralentizan significativamente Discourse. Puedes probar a cambiar a Vistas Previas de la Lista de Temas (TC), que carga mucho más rápido que el Plugin.
Si desactivas las Vistas Previas de la Lista de Temas por completo, Discourse se acelerará varias veces. ![]()
Estamos utilizando un plugin personalizado para permitir que los temas sigan mostrando las imágenes de CDN compartidas en ellos, en los metadatos OG cuando se comparten en redes sociales. Ese plugin de soporte de CDN fue desarrollado por @fzngagan, Faizan. ¿Tienes alguna forma de mover tu plugin escrito al TC de Vistas Previas de Temas (TLP) para que el sitio cargue más rápido?
@pfaffman, ¿tienes alguna sugerencia técnica específica sobre qué exactamente necesitamos hacer para acelerar nuestra base de datos y sitio web? Asumo que en howtodiscuss.com hay más de 50 mil temas y es un sitio web de alto tráfico.
Mis preguntas:
-
¿Existe alguna configuración de multihilo o de CPU/cores paralelos que podamos configurar en Discourse? NodeBB ofrece esto para hacer frente al alto tráfico.
-
¿Hay soporte de caché en el lado del servidor en Discourse? ¿Dónde y cómo se configura?
-
¿Cómo podemos lograr una puntuación del 100% en Google PageSpeed para https://howtodiscuss.com?
-
¿Qué cambios podemos hacer en el archivo app.yaml? Estamos en un droplet de DigitalOcean con 4 vCPU y 8 GB de RAM.
-
Estamos usando Cloudflare para servir nuestro sitio. ¿Hay alguna optimización que podamos hacer allí? Cuando activo Rocket Loader de Cloudflare, mi Discourse no funciona correctamente y aparecen errores en la consola de JavaScript del lado del cliente.
-
¿Existe alguna forma de minificar automáticamente CSS, JS y HTML, y habilitar la compresión gzip en el lado del servidor?
-
Por favor, comparte información sobre las optimizaciones que han realizado ustedes en meta.discourse.org para hacer frente a un tráfico más alto; podemos intentar hacer lo mismo.
-
Por favor, comparte información sobre las optimizaciones que han probado otros sitios de alto tráfico en Discourse.
Una vez que logremos acelerar nuestro sitio web, estaremos encantados de que publiquen nuestro sitio también en la lista de comunidades exitosas de Discourse. Gracias.
Bueno, el número de temas no es lo mismo que el número de publicaciones ni el tamaño de la base de datos, pero no es tan grande.
El sitio está caído ahora, así que no puedo ver el número de publicaciones.
Te recomiendo que edites app.yml manualmente, revises la información de ajuste allí y vuelvas a compilar. Hay varios temas que discuten formas de ajustar la base de datos.
También podrías cambiar a uno de los nuevos droplets de CPU más rápidos de Digital Ocean.
¡Hola, @ahmed_khan1! No arriesgues tiempo de inactividad; incluso unos pocos minutos fuera de línea te costarán una reputación preciosa a los ojos de Google.
Simplemente paga a un profesional para que se encargue de esto de una vez por todas. Como veo que tu sitio tiene un tráfico considerable, sigue la cordura y nunca optes por lo barato.
Estoy ejecutando un sitio con 20 000 temas en una máquina de 2 núcleos y 2 GB de RAM sin problemas (aunque quizás no sea tan activo como el tuyo…).
Pero sí, si el problema es ejecutar mucho JavaScript, entonces el rendimiento del backend es irrelevante.
¿Has establecido esto en cero?
Eso ayudará un poco.
Puedes pasar a TC para acelerar TLP, pero tiene una limitación de renderizado en navegadores basados en Chromium (de ahí que aún no haya desactivado el plugin; estoy esperando que LayoutNG actualice Grid CSS).
tenemos un nuevo droplet de DigitalOcean. solo cómpralo en 1
aquí está app.yml
## este es la plantilla de contenedor Docker todo-en-uno y autónomo de Discourse
##
## Después de realizar cambios en este archivo, DEBES reconstruir
## /var/discourse/launcher rebuild app
##
## ¡TEN *MUCHO* CUIDADO AL EDITAR!
## ¡LOS ARCHIVOS YAML SON SUPER SENSIBLES A ERRORES EN ESPACIOS EN BLANCO O ALINEACIÓN!
## visita http://www.yamllint.com/ para validar este archivo según sea necesario
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
## Descomenta estas dos líneas si deseas agregar Lets Encrypt (https)
#- "templates/web.ssl.template.yml"
#- "templates/web.letsencrypt.ssl.template.yml"
## ¿Qué puertos TCP/IP debe exponer este contenedor?
## Si quieres que Discourse comparta un puerto con otro servidor web como Apache o nginx,
## consulta https://meta.discourse.org/t/17247 para más detalles
expose:
- "2045:80" # http
# - "443:443" # https
params:
db_default_text_search_config: "pg_catalog.english"
## Establece db_shared_buffers a un máximo del 25% de la memoria total.
## se establecerá automáticamente por bootstrap según la RAM detectada, o puedes sobrescribirlo
db_shared_buffers: "2048MB"
## puede mejorar el rendimiento de ordenamiento, pero añade uso de memoria por conexión
#db_work_mem: "40MB"
## ¿Qué revisión de Git debe usar este contenedor? (por defecto: tests-passed)
#version: tests-passed
env:
LANG: en_US.UTF-8
# DISCOURSE_DEFAULT_LOCALE: en
## ¿Cuántas solicitudes web concurrentes se admiten? Depende de la memoria y los núcleos de CPU.
## se establecerá automáticamente por bootstrap según los CPUs detectados, o puedes sobrescribirlo
UNICORN_WORKERS: 8
## TODO: El nombre de dominio al que responderá esta instancia de Discourse
## Requerido. Discourse no funcionará con una dirección IP desnuda.
DISCOURSE_HOSTNAME: "howtodiscuss.com"
## Descomenta si quieres que el contenedor se inicie con el mismo
## nombre de host (opción -h) que se especificó arriba (por defecto "$hostname-$config")
#DOCKER_USE_HOSTNAME: true
## TODO: Lista de correos electrónicos separados por comas que serán administradores y desarrolladores
## en el registro inicial, ejemplo 'usuario1@ejemplo.com,usuario2@ejemplo.com'
DISCOURSE_DEVELOPER_EMAILS: "admin@gmail.com"
## TODO: El servidor de correo SMTP utilizado para validar nuevas cuentas y enviar notificaciones
## Se requieren dirección, nombre de usuario y contraseña de SMTP
## ¡ADVERTENCIA: el carácter '#' en la contraseña de SMTP puede 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.ejemplo.com # (requerido por algunos proveedores)
#DISCOURSE_NOTIFICATION_EMAIL: nadie@discourse.ejemplo.com # (dirección desde la cual enviar notificaciones)
#DISCOURSE_SMTP_ENABLE_START_TLS: true # (opcional, por defecto true)
## Si agregaste la plantilla de Lets Encrypt, descomenta abajo para obtener un certificado SSL gratuito
#LETSENCRYPT_ACCOUNT_EMAIL: yo@ejemplo.com
#DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456
## La dirección http o https de la CDN para esta instancia de Discourse (configurada para extraer)
## consulta https://meta.discourse.org/t/14857 para más detalles
#DISCOURSE_CDN_URL: https://discourse-cdn.ejemplo.com
## El contenedor Docker no tiene estado; todos los datos se almacenan en /shared
volumes:
- volume:
host: /var/discourse/shared/standalone
guest: /shared
- volume:
host: /var/discourse/shared/standalone/log/var-log
guest: /var/log
## Los plugins van aquí
## consulta https://meta.discourse.org/t/19157 para más detalles
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 soporte de JAX matemático
- git clone https://github.com/discourse/discourse-solved.git # plugin personalizado para preguntas y respuestas y elegir la mejor respuesta
- git clone https://github.com/discourse/discourse-voting.git # plugin personalizado para votar solo en temas
- git clone https://github.com/discourse/discourse-yearly-review.git # plugin personalizado para publicar automáticamente un tema anual de actividad del foro
- git clone https://github.com/discourse/discourse-user-notes.git # plugin personalizado para permitir que el personal agregue notas sobre un usuario
- git clone https://github.com/paviliondev/discourse-question-answer.git # plugin personalizado no oficial para votación estilo SO en publicaciones
- git clone https://github.com/discourse/discourse-adplugin.git # plugin personalizado oficial para anuncios
- git clone https://github.com/discourse/discourse-whos-online.git # plugin personalizado para ver quién está en línea
- git clone https://github.com/paviliondev/discourse-topic-previews.git # plugin personalizado para mostrar vistas previas de temas de manera agradable
- git clone https://github.com/paviliondev/discourse-ratings.git # plugin personalizado para permitir calificaciones de usuarios en temas
- git clone https://github.com/discourse/discourse-cakeday.git # plugin oficial para cumpleaños y celebraciones de fecha de ingreso
- git clone https://github.com/discourse/discourse-saved-searches.git # plugin oficial para notificaciones de búsquedas guardadas
- git clone https://github.com/paviliondev/discourse-follow.git # plugin personalizado para permitir que los usuarios se sigan mutuamente
- git clone https://github.com/FaizanZahid/discourse-amp-htd-plugin.git # soporte personalizado compilado AMP para HTD
- git clone https://github.com/discourse/discourse-assign.git # personalizado para asignar temas al personal
- git clone https://github.com/paviliondev/x-discourse-tlp-thumbnail.git # plugin personalizado para mostrar miniaturas de imágenes de CDN
## Cualquier comando personalizado para ejecutar después de la compilación
run:
- exec: echo "Inicio de comandos personalizados"
## Si quieres establecer la dirección de correo electrónico 'De' para tu primer registro, descomenta y cambia:
## Después de recibir el primer correo de registro, vuelve a comentar la línea. Solo necesita ejecutarse una vez.
- exec: rails r "SiteSetting.notification_email='noreply@howtodiscuss.com'"
- exec: echo "Fin de comandos personalizados"
Creo que estás ejecutando varios sitios en esta única instancia. No estoy seguro de cómo eso afectaría los problemas de rendimiento.
Solo estamos ejecutando este sitio en este servidor.
Podrías aumentar db_work_mem a 100.
Es posible que tengas problemas con tu proxy inverso que está ralentizando las cosas.
¿Qué muestra el mini profiler?
También puedes instalar el plugin de Prometheus para obtener más datos.
¿Has probado desactivar el plugin ¿Quién está en línea?
He intentado, pero no veo una gran mejora
@pfaffman
Aquí están el uso de CPU y memoria
He cambiado los trabajadores de unicorn a 24
y los búferes de memoria a 4096 MB
¿Ya has revisado el lado del navegador?
Aunque esto es solo una instantánea, el uso de tu CPU parece muy bajo. Creo que estás sobredimensionando.
El uso de memoria es alto solo por la cantidad de unicornios. Redúcelos si empieza a afectar gravemente el intercambio en disco.
Definitivamente, revisa las latencias de recuperación de datos y de JavaScript en las herramientas de desarrollo del navegador.
La lentitud percibida puede deberse a la cantidad de trabajo que está realizando el navegador.
Por las cabeceras HTTP parece que estás usando Ezoic y Cloudflare. ¿Es eso correcto? No estoy seguro de qué hace, pero eso podría ser otro factor para la lentitud percibida.
Mi recomendación: Comienza con una configuración simple sin ningún proxy ni poniendo tu Discourse detrás de Cloudflare. Asegúrate de que sea razonablemente rápido y solo entonces comienza a optimizar siguiendo Enable a CDN for your Discourse o, si realmente quieres usar Cloudflare, Full site CDN acceleration for Discourse.
Eso es correcto, solo hay 1 sitio, https://howtodiscuss.com, que se sirve en este servidor mediante NGINX. ¿Conoces alguna forma de mejorar su velocidad?


