关于工人数的建议:核心数 × 2?

所以所有关于“UNICORN WORKER 应为 2*vCPU”的说法都是错误的?
我的服务器是 Intel Xeon E5-2686 v4 @ 2.30GHz—24vCPU+32GB 内存
我需要设置多少个 UNICORN WORKER
8 个?还是 48 个?
我的网站有超过 7k 用户和大约 1k 的每日活跃用户。用户每天发送 3k-7k 条帖子。我们的社区每天有 120k-200k 的页面浏览量/天,包括爬虫和匿名用户。

这取决于许多因素。例如,您的数据库大小与 RAM 的比例、登录流量与匿名流量的比例、是否有插件使您的 Sidekiq 队列更繁忙、您是否正在运行 YJIT 等。

简单的方法是查看高峰时段的 MiniProfiler 数据,浏览论坛,看看性能是否有所下降,并找出瓶颈。

由于这台 CPU 比较老旧,我会比通常的 Unicorn 工作进程数设置得更多一些,因为每个请求都会比平时花费更长的时间。但如果您的 PostgreSQL 和 Redis 运行在同一台服务器上,您就不能通过运行过多的工作进程来耗尽它们。

尝试从 16 个工作进程开始运行,并评估网站的性能。

有没有一个简单易懂的描述,说明 Unicorn 工作进程在做什么?我的理解是,每次用户页面请求都必须由一个 Unicorn 工作进程来处理。如果不够,用户就得等待。如果太多……嗯,也许会消耗一点内存?

它们是应用程序 Web 服务器。

1 个赞

现在不是高峰期,但我认为加载时间有问题。

看起来您10年前的CPU已经显露老态了。增加Unicorn工作进程可以允许您同时处理更多用户,但不会让单个请求的速度变快。

您可以尝试启用YJIT吗?

3 个赞

使用您的硬件,我预计应用程序的平均登录列表/最新时间约为 150 毫秒,SQL 约为 80 毫秒。

我建议从 12 个工作进程开始,看看它的表现如何。您可以做的最好的事情是跟踪指标;如果您想知道是否应该添加更多工作进程,请查看请求是否在等待应用程序工作进程。

您是否正在跟踪 Discourse 本身通过 Prometheus 导出器导出的指标?这些将让您全面了解实例的整体性能。

匿名用户和普通用户(非管理员)的性能数字是多少?

5 个赞




There are many mega topics in our Discourse, and the largest one is already in the twelfth section.
Reply views

1 个赞

:laughing: (/停止大笑,登录托管服务商… )

哇,这难道不是默认设置吗??

编辑:哦,当然,你可能是用旧的app.yml构建的,并且没有更新过。

1 个赞

在我们的托管环境中是默认设置,但将其设为默认设置有点困难,因为人们可能在内存受限的情况下运行……

话虽如此,我们的 JS 构建使用的 RAM 比 Discourse 本身多得多,所以你可以说任何能够构建 JS 资源的人都有足够的 RAM 可以随意使用 :stuck_out_tongue:

1 个赞

在这些图片中,您设置了多少个工作进程?

我认为您应该

  1. 稍微增加工作进程,因为您会遇到一些排队
  2. 启用 YJIT,因为您的 Web 时间相当慢

现在只有 8 个工作进程,并且 YJIT 已启用。
我应该增加多少个工作进程?

顺便说一下,这是 Falco 查看的内容,以便提出该建议:

我建议将 8 个增加到 12 个。这样您就有一些余量,并且应该可以清除这些队列。

顺便说一下,那个大的峰值表明其他请求正在等待……某个东西,可能是某个公共锁。也许是一个大型主题帖子。

如果您还能获取 PostgreSQL 使用情况指标,那将很有用。

大型主题是一个薄弱环节,请参阅 Improving Instance Performance (Megatopics, Database Size and Extreme Load)

考虑将它们分解或改用聊天(我看到您最大的那个有 8.9k 条回复,明确是一个聊天室)。

我们社区的讨论文化是 megatopics,这甚至在我们开始使用 Discourse 之前就已经形成了,而聊天缺乏模糊的剧透和隐藏的细节功能。

1 个赞

如何做到

我们使用 https://github.com/prometheus-community/postgres_exporter,但不确定是否有关于设置它的元指南。

不过,鉴于您似乎已经设置了 Prometheus,看起来您知道自己在做什么。


now server ram is 16/32GB, UNICORN_WORKERS: 12, db_shared_buffers: “4096MB”
Because there is still RAM available and a few web request queued, I increased the UNICORN_WORKERS to 24. In the afternoon today, the server suddenly shut down and after it was restarted, users flooded in immediately. This led to a very low number of Active Web Requests and a large number of queued requests. A few days ago, we observed that 24 UNICORN_WORKERS could handle 150+ Active Web Requests, but only 30 Active Web Requests this afternoon. This is because we have just changed the domain, and there are many posts being rebaked by sidekiq. This has caused a lot of pressure on the server. What should we do?