Ed_S
(Ed S)
1
能否将其设置为站点配置选项,以控制可使用的内存量?目前调优设置为 2G(编辑:哎呀,我弄错了,见下文)——之前是 4G——然而推荐的硬件配置却是 1G 内存加交换空间。在我看来,如果 Ruby 的内存使用量真的达到 2G,那么 1G 内存的节点很可能会陷入严重的分页风暴。
来自升级日志:
迁移默认配置
填充默认数据
*** 打包资源。这需要一些时间 ***
$ RUBY_GC_MALLOC_LIMIT_MAX=20971520 RUBY_GC_OLDMALLOC_LIMIT_MAX=20971520 RUBY_GC_HEAP_GROWTH_MAX_SLOTS=50000 RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR=0.9 bundle exec rake assets:precompile
清理临时文件
打包资源
1 个赞
不确定这些设置在现代 Ruby 中的相关性,但 @sam 最清楚。
1 个赞
Ed_S
(Ed S)
3
咳咳,打扰一下,那不是2G,而是20M。所以情况和我之前想的完全不一样。(编辑:情况更糟了!见下文)
1 个赞
Falco
(Falco)
5
Discourse 的内存使用是可预测的,因此您应该调整的配置项是 Unicorn 工作进程的数量。
如果您使用的是 1GB 内存的服务器,我们将默认设置为 2 个工作进程,这在此低内存配置下应能正常运行。
2 个赞
Ed_S
(Ed S)
6
确实,在作为论坛运行时。但这并非如此!
在升级过程中,某些任务会为 Ruby 指定这些环境变量。
1 个赞
Falco
(Falco)
7
是的,在更新过程中,我们会设置这些变量,以防止在配置极低的机器上因内存压力导致升级失败。
2 个赞
Ed_S
(Ed S)
8
好的,我的观察是,在某些情况下,这些限制可能设置得过高,因此我在想是否可以将其配置为可调整。
2 个赞
Falco
(Falco)
9
多年来,我们对该流程进行了大量测试,可以确保它适用于使用 1GB VPS 的小型社区,能够正常运行。甚至在升级过程中,它还会终止额外的 Unicorn 工作进程以释放内存,从而提供帮助。
您可以查看来自以下提交的代码:
如果您能在 Digital Ocean 的 Droplet 上复现失败情况,我们很乐意协助排查。
如果这确实是必需的,您可以 fork 该插件并根据您的需求进行调整。
4 个赞
Ed_S
(Ed S)
10
谢谢,我现在明白了。(两个非常重要的点:这些 GC 设置是专门针对升级调整的,而且单位是字节,因此当前限制设置为 20MB。这篇较早的帖子中有一些有用且有趣的内容(因为我现在无法直接访问该链接,所以使用了归档链接)。)
2 个赞
我们应该恢复那个话题吗,@sam?它具有历史价值还是已经过时了?
1 个赞
sam
(Sam Saffron)
12
这确实已经过时了,最新的 Ruby 有多个 malloc 限制。这是一个有趣且具有历史价值的主题,但需要在顶部加上醒目的“过时”标识。
我们的升级已经尽可能紧凑地运行了,在此基础上能做的最好的事情就是降低可用性。如果内存资源极其受限,那么在升级时您将不得不接受服务中断。
5 个赞