pfaffman
(Jay Pfaffman)
2020 年11 月 19 日 18:13
1
我正在运营一个流量相当大的网站(>15 万页面浏览量/天)。我遇到了一些 429 错误,主要集中在消息总线上。之前由于 set_real_ip_from 配置错误导致了一些问题,但现已解决。我还(也许是暂时性地)移除了限流模板。
目前我仍然看到大约每秒 0.5 个 429 错误。
我有 5 个 Unicorn 工作进程,配备 2 核 4 线程的 CPU 和 16GB 内存。Postgres 部署在另一台主机上。CPU 使用率仍保持在 50% 以下的空闲状态。
我在大约 8:20 移除了限流模板,并将 Unicorn 工作进程数量提升至 5 个。
Falco
(Falco)
2020 年11 月 19 日 19:24
2
这完全正常。当你的 Unicorn 进程负载过高并出现少量排队时,消息总线会因收到 429 状态码而进行退避。
pfaffman:
2 核/4 线程 CPU,16GB 内存
如果该节点不运行数据库,4 核配 16GB 内存的比例确实有些奇怪。例如,8 核配 8GB 内存会更合适。
4 个赞
pfaffman
(Jay Pfaffman)
2020 年11 月 19 日 20:41
3
Falco:
这完全正常,
太好了!谢谢。CPU 目前仍因图像处理而高负荷运转,我希望这在一两天内就能解决。
确实如此。但裸机只有 2 核/4 线程。增加内存很容易,增加核心却不行(我家里还有一台 32GB 的!)。我将数据库和 Web 服务拆分到两台机器上,以获得更多 CPU 资源。同一台数据库服务器上还运行着来自低流量站点的另外六个数据库(Web 服务则位于不同的主机上)。您认为是否应该将数据库和 Web 服务运行在同一台机器上?我可能会损失一些 CPU 性能,但应该会改善延迟,我想。
riking
(Kane York)
2020 年11 月 19 日 20:51
4
如果您具备负载均衡能力,那么可以 尝试 将 Web 工作进程部署在两台机器上以应对高负载站点,其中包含数据库的那台机器上分配较少进程,例如 5+2 的配置。
如果通过增加预算解决问题是可行的选项,那就直接租用另一台具有更优 CPU 与内存比例的主机吧。
pfaffman
(Jay Pfaffman)
2020 年11 月 19 日 21:27
5
好吧,这些机器是我免费获得的,确实已经有些年头了,我也开始接受这个事实——不过单核 CPU 性能似乎仍优于 DigitalOcean 的 Droplet。如果短期内能用金钱解决问题,那我大概就不会遇到这位想要企业级性能却只愿出商业价格的客户了。
不过我也发现,我在链中的其他地方硬编码了独角兽的数量,所以我目前仍然只运行了 3 个。
遗憾的是,我当前的配置只能与一台主机上的 Docker 通信。不过,我应该花点时间看看是否也能在这台机器上部署几个独角兽实例。或许也是时候重新审视 HAproxy 了,但我还有另一个项目想先上线。
非常感谢您的见解。
编辑:当我最终将独角兽数量从 3 个增加到 5 个后,性能图表看起来差不多(也许稍微慢了一点点?),但 429 错误大幅减少。看来一旦图像处理完成,一切都会运行得很顺畅。
2 个赞
pfaffman
(Jay Pfaffman)
2020 年11 月 20 日 16:50
6
仅仅一天之后,429 错误就几乎降为零,Rafael 的“别担心”真是绝妙的建议!再次感谢 Kane 和 Rafael。我无法用言语表达我对你们帮助的感激之情。
4 个赞
system
(system)
关闭
2020 年12 月 20 日 17:32
8
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.