大家好,
我们将 CentOS 7 服务器从 2.2.2 升级到了 2.7.0.beta4,此后一直面临页面加载延迟的问题。尤其是在涉及数据库或图片内容的页面上,延迟严重到系统已无法正常使用。
如有任何相关指导,我们将不胜感激。
大家好,
我们将 CentOS 7 服务器从 2.2.2 升级到了 2.7.0.beta4,此后一直面临页面加载延迟的问题。尤其是在涉及数据库或图片内容的页面上,延迟严重到系统已无法正常使用。
如有任何相关指导,我们将不胜感激。
过去几年发生了不少事情。有一次 bug 修复需要处理所有图片。我怀疑您的服务器正因这项工作而负载过高。您可以查看 /sidekiq 以了解队列情况。
您的数据库有多大?有多少张图片?Sidekiq 显示了什么?您使用的是 SSD 对吧?
这是一个基于虚拟机的服务器,因此不确定是否使用了 SSD。
我找不到 Sidekiq 的访问方式,因为这次部署不是我完成的,所以不确定如何访问它。
你知道它是如何安装的吗?听起来这并非标准安装(否则,如果你是管理员,/sidekiq 应该对你可用)。
解决性能问题的最佳途径是调查性能下降的原因。多年来添加了大量后台任务(如图像优化、重新烘焙等),它们可能正在运行并占用服务器资源。待这些任务完成后,性能应该会得到改善。
访问 /sidekiq(请使用管理员账户!)以查看正在运行的任务,是一个很好的第一步。
我发现服务器存在以下问题:即使我尝试打开帖子查看,队列仍然显示为空;同时,Sidekiq 门户在加载帖子时也会卡住,只有在帖子完全加载后才会刷新。
此外,一旦加载完成,队列依然显示为空。如有任何帮助或建议,将不胜感激。
如果队列为空,说明并没有大量后台任务在运行,因此问题出在其他地方。
您是否安装了插件?是否有主题组件正在发起大量 API 调用?
我在上文还提出了其他问题。
你的数据库有多大?
有多少张图片?
是否有主题组件正在发起大量 API 调用?
能否告诉我,在基于 Docker 的部署环境中,如何获取上述信息?我知道最近的备份大小为 135 MB。
关于插件,是的,我们安装了以下插件:
- git clone https://github.com/discourse/docker_manager.git
- git clone https://github.com/jonmbake/discourse-ldap-auth.git
- git clone https://github.com/discourse/discourse-math
- git clone https://github.com/discourse/discourse-chat-integration.git
- git clone https://github.com/discourse/discourse-voting.git
- git clone https://github.com/unfoldingWord-dev/discourse-mermaid.git
- git clone https://github.com/discourse/discourse-solved.git
- git clone https://github.com/discourse/discourse-assign.git
- git clone https://github.com/discourse/discourse-knowledge-explorer.git
- git clone https://github.com/discourse/discourse-cakeday.git
我建议使用移除 Mermaid 插件。
您有多少帖子和用户?流量情况如何?
内存有多大?
看起来您使用 2GB 的 DigitalOcean Droplet 应该就足够了;您可以先创建一个实例试试看效果。
也许您的服务器存在其他问题?系统是否已更新?最近是否重启过?
好的,我会移除那部分。
我们大约有 4000 篇帖子和 350 名用户。
同时在线的平均用户数并不高,平均最多大概 5 到 10 人。
这台服务器是最近创建的,共享配置为 8GB 内存和 10GB 交换空间。目前它已连续运行了 13 天。但性能问题与重启和运行时间无关。
您的安装肯定存在问题;使用此硬件,性能应该好得多。
尝试让 PostgreSQL 执行显式的 VACUUM 操作。如果您使用的是全功能容器安装:
# docker exec -it -u postgres app psql discourse
psql (13.1 (Debian 13.1-1.pgdg100+1))
输入 "help" 获取帮助。
discourse=# VACUUM ANALYZE;
VACUUM
您的 app.yml 中设置了多少个 Unicorn 工作进程?
您可以在 env 部分添加以下内容,让 Discourse 在响应中设置额外的性能头信息:
DISCOURSE_ENABLE_PERFORMANCE_HTTP_HEADERS: true
顺便一提,您可以按照 这篇帖子 启用 miniprofiler。
这应该足够了。
我不确定是否有人建议过你重新运行 discourse-setup 来调整 Discourse 的内存使用,或者在服务器其他用途已知的情况下,这些默认设置是否合理。
如果你在 PG13 升级后没有重新索引数据库,那么可以查看 PostgreSQL 13 更新 以获取相关信息。
是的,缺少表统计信息(VACUUM ANALYZE)是此处最可能的原因。
VACUUM FULL VERBOSE;
REINDEX DATABASE discourse;
VACUUM VERBOSE ANALYZE;
我运行了这些命令,并在环境变量中设置了 header,但页面加载时间并没有明显改善。
我运行了 8 个 Unicorn 进程。
你在 PostgreSQL 中运行了那些命令,对吧?
是的,我在运行上述命令之前执行了 docker exec -it -u postgres app psql discourse。
嗯,这确实很奇怪。没人遇到过类似的问题。你的硬件配置看起来是足够的。我唯一的猜测是反向代理出了问题(我猜你这台机器上还运行着其他服务?)。
是的,另一个基于 Docker 的服务。
不过它并不涉及任何性能密集型任务,否则会在机器的性能指标中体现出来。