将节流重新烘焙以防止内存耗尽?

我正尝试重新烘焙 45k 帖子,因为我更改了 S3 CDN URL,但它一直耗尽内存并被终止。

我阅读了这篇关于设置交换文件(swapfile)的文章……

前两个命令运行正常……

  1. 创建一个空的交换文件
    install -o root -g root -m 0600 /dev/null /swapfile

  2. 写入一个名为 ‘swapfile’ 的 2GB 文件
    dd if=/dev/zero of=/swapfile bs=1k count=2048k

但在 mkswap /swapfile 时出现错误……

mkswap 错误 swapfile 已挂载,无法创建交换空间

我尝试了以下方法……

swapoff /swapfile && rm /swapfile

并收到此错误……

swapoff: 不是超级用户

我在 Digital Ocean Droplet 上,所以我想我没有必要的权限?

遇到这些障碍后,我尝试运行以下命令来重新烘焙未烘焙的帖子……

rake posts:rebake_uncooked_posts

它会运行几百个,如果幸运的话,可能会有几千个,然后又被终止。在昨天一直看着它之后,我只完成了大约一半。:wink:

是否有办法运行一个有节流的重新烘焙命令?我不在乎它需要多长时间,过夜或任何时间,我只是希望它不要再失败了。

非常感谢任何帮助。

说来也怪,在我写完所有这些内容时,我又让未完成的运行了一次。我和一些朋友出去吃了顿悠长的午餐,回来时它已经 100% 完成了。我不确定是不是交换文件(swapfile)终于开始工作了,还是仅仅因为使用率低而恰好赶上了时机,但是……

终于完成了!

也许如果有人有答案,可以帮助到其他人或我下一次尝试。

在 Ubuntu 上:

Sudo -i

在 Debian 上:

Su -

1 个赞

谢谢。不确定我是否做对了。

那看起来不对。你在遵循哪些说明?

而且你为什么要容器内部创建交换空间?交换空间应该在宿主机上创建,而不是在容器内部。

因为我只知道我在做什么一点点。:wink:

所以是在 ubuntu: 基础级别而不是在 ubuntu:/var/discourseubuntu-app:/var/www/discourse 级别创建?

关于重新烘焙(rebake)限速有什么想法吗?

1 个赞

我从没见过重新烘焙被限速,它是异步的,它会将任务排队,然后在后台处理。

1 个赞

好的,谢谢。我的已经完成了重新烘焙,所以我觉得自己很幸运,不再折腾它了。:smiley:

警告 :warning::不要在生产站点上盲目操作,很有可能出现问题且没有真正的恢复方法。

不,它不是 ubuntu: 级别。

在尝试创建交换分区之前,你是否执行了 ./launcher enter app?如果是,那就是你不应该做的事情。

当你首次登录到你的服务器时,你是在主机上;当你进入 app 时,你是在容器内部执行操作。

交换分区需要在主机上创建,应用程序生活在容器内部,这是你将访问以运行 rebake 命令的地方。

好的,感谢您的指导。

我们的论坛只是一群朋友的聚集地,而且有很好的备份,所以如果我把它停用一两周,我们就只能忍受 GroupMe 了。 :wink:

这意味着您已经有了一个交换文件,它被称为 /swapfile,并且正在使用中。

如果您想扩大它,可以停止您的容器,然后卸载它,接着使用那个 dd 命令来扩大它,然后再使用 mkswap 命令。

如果其他人看到此内容,我通常的做法是使用 grep swap discourse-setup 来查看其中的命令。这是一种稍微简单一些的操作方法。

3 个赞

我经常充当一个警示的尾巴。

感谢您的补充。

1 个赞

我不知道你们怎么样,但在一个漫长的重新烘焙过程中,我反复出现内存不足的情况。创建 2 GB 的交换空间有所改善(更多的帖子被重新烘焙),但过了一会儿仍然出现 OOM(内存不足)。将交换空间增加到 4 GB 后,我就能够重新烘焙我所有的帖子了。

除了这篇指南 Create a swapfile for your Linux server 之外,我对交换文件一无所知,但 ChatGPT 足够了解情况,可以帮助我顺利地增加我的交换空间。

3 个赞

我遇到的一个问题是我不清楚哪些工作需要在哪个区域完成。是在容器内部还是外部,或者是在应用程序内部还是外部。我尽量做好笔记,并为将来会再次使用的东西创建心智捷径。但正当我开始理解它时,我需要做的事情就完成了,而且我可能在接下来的 6 到 12 到 18 个月内都不会再碰它。然后我就得重新学习一遍。

听起来像每个系统管理员的整个生命故事 :joy:

我的解决方案是做笔记,然后在 meta 上创建一个简短的操作指南

我把它设为维基,这样其他人如果发现错误或疏忽,就可以编辑它,下次我需要做同样的事情时……

1 个赞