# 3G RAM + 1G 分区交换 - 够用吗？

**URL:** https://meta.discourse.org/t/3g-ram-1g-partition-swap-is-it-enough/228951
**Category:** Self-hosting
**Tags:** server-resources
**Created:** [2022 年6 月 3 日 16:08 UTC](https://meta.discourse.org/t/3g-ram-1g-partition-swap-is-it-enough/228951 "2022-06-03T16:08:20Z")
**Posts on this page:** 17
**Page:** 1

<div class="post-metadata">

### Author: ![meglio](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/meglio/32/71444_2.png) [@meglio](https://meta.discourse.org/u/meglio)
#### Post date: [2022 年6 月 3 日 16:08 UTC](https://meta.discourse.org/t/3g-ram-1g-partition-swap-is-it-enough/228951/1 "2022-06-03T16:08:20Z")

</div>

我们刚买的VPS自带3G内存+1G分区交换空间——我还需要设置一个交换文件吗，还是说这样就够了？

 ![image](https://global.discourse-cdn.com/meta/original/4X/5/b/1/5b1d7f3a97e9f192f16bf098e69125c4468f46c8.png)

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [2022 年6 月 3 日 17:35 UTC](https://meta.discourse.org/t/3g-ram-1g-partition-swap-is-it-enough/228951/2 "2022-06-03T17:35:19Z")

</div>

对于小型 Discourse 实例来说，这已经足够了。

---

<div class="post-metadata">

### Author: ![meglio](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/meglio/32/71444_2.png) [@meglio](https://meta.discourse.org/u/meglio)
#### Post date: [2022 年6 月 4 日 01:17 UTC](https://meta.discourse.org/t/3g-ram-1g-partition-swap-is-it-enough/228951/3 "2022-06-04T01:17:41Z")

</div>

我的意思是，不是从它是否会运行得很快等方面考虑，而是从它是否会产生任何错误，例如无法分配额外内存等。我的问题有意义吗？另外，添加一个优先级更低的文件交换会有帮助吗？只是为了确保。

---

<div class="post-metadata">

### Author: ![sunjam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sunjam/32/175682_2.png) [@sunjam](https://meta.discourse.org/u/sunjam)
#### Post date: [2022 年6 月 4 日 01:42 UTC](https://meta.discourse.org/t/3g-ram-1g-partition-swap-is-it-enough/228951/4 "2022-06-04T01:42:36Z")

</div>

> [@meglio](#):
>
> 我们刚买的VPS自带3G内存+1G分区交换空间——我还需要设置一个交换文件吗，或者这样就够了？

直接购买一个更强大的VPS，至少配备8GB内存。否则你将浪费时间。

---

<div class="post-metadata">

### Author: ![meglio](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/meglio/32/71444_2.png) [@meglio](https://meta.discourse.org/u/meglio)
#### Post date: [2022 年6 月 4 日 01:45 UTC](https://meta.discourse.org/t/3g-ram-1g-partition-swap-is-it-enough/228951/5 "2022-06-04T01:45:30Z")

</div>

> [@sunjam](#):
>
> 否则你会浪费时间。

这没有回答我的问题。

---

<div class="post-metadata">

### Author: ![sunjam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sunjam/32/175682_2.png) [@sunjam](https://meta.discourse.org/u/sunjam)
#### Post date: [2022 年6 月 4 日 01:47 UTC](https://meta.discourse.org/t/3g-ram-1g-partition-swap-is-it-enough/228951/6 "2022-06-04T01:47:34Z")

</div>

我无法想象在少于 8GB 内存的情况下运行 Discourse。

> [@Falco](#):
>
> 这足以满足小型 Discourse 实例的需求。

Discourse 团队成员说没问题，我相信它没问题。

祝你好运。

---

<div class="post-metadata">

### Author: ![Stephen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/stephen/32/95011_2.png) [@Stephen](https://meta.discourse.org/u/Stephen)
#### Post date: [2022 年6 月 4 日 03:03 UTC](https://meta.discourse.org/t/3g-ram-1g-partition-swap-is-it-enough/228951/7 "2022-06-04T03:03:04Z")

</div>

Discourse-setup 将会标记任何内存问题。

---

<div class="post-metadata">

### Author: ![meglio](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/meglio/32/71444_2.png) [@meglio](https://meta.discourse.org/u/meglio)
#### Post date: [2022 年6 月 4 日 08:01 UTC](https://meta.discourse.org/t/3g-ram-1g-partition-swap-is-it-enough/228951/8 "2022-06-04T08:01:33Z")

</div>

这也不能回答我的问题。也许我的问题提得不好？

---

<div class="post-metadata">

### Author: ![Jonathan5](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jonathan5/32/197134_2.png) [@Jonathan5](https://meta.discourse.org/u/Jonathan5)
#### Post date: [2022 年6 月 4 日 08:51 UTC](https://meta.discourse.org/t/3g-ram-1g-partition-swap-is-it-enough/228951/9 "2022-06-04T08:51:02Z")

</div>

我的论坛托管在 Digital Ocean 的 2GB 内存/50GB 磁盘的 droplet 上，运行得相当不错。

当时 Discourse 安装指南推荐的最低配置是 1GB，但后来我升级了。

如果你能提供更多关于你的论坛规模/繁忙程度的信息，我相信你会得到更详细的答复。

我认为 Discourse 安装程序会自动设置一个交换文件（我没有手动操作），所以我想这部分回答了你的问题。

---

<div class="post-metadata">

### Author: ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)
#### Post date: [2022 年6 月 4 日 09:04 UTC](https://meta.discourse.org/t/3g-ram-1g-partition-swap-is-it-enough/228951/10 "2022-06-04T09:04:31Z")

</div>

> [@Jonathan5](#):
>
> 我认为 Discourse 安装程序会自动设置交换文件（我没有手动做任何事情），所以我想这回答了你问题的一部分。

我认为它会在安装时创建一个 2GB 的交换文件，前提是它检测到你还没有。

**编辑：** 我认为这个说法更准确：

> [@Discourse](#):
>
> 💡 对于内存小于或等于 2GB 的服务器，运行 `./discourse-setup` 将会提示并自动创建一个 2GB 的交换文件。

---

<div class="post-metadata">

### Author: ![Ed\_S](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ed_s/32/134015_2.png) [@Ed\_S](https://meta.discourse.org/u/Ed_S)
#### Post date: [2022 年6 月 4 日 09:26 UTC](https://meta.discourse.org/t/3g-ram-1g-partition-swap-is-it-enough/228951/11 "2022-06-04T09:26:13Z")

</div>

官方最低支持是 1G 内存 + 2G 交换空间 - 如果你的论坛很小，这样就足够了。不过，每次更新都会稍微变大一些，所以我预计总有一天会不够用。

要让论坛正常工作而不崩溃，内存和交换空间的总和是重要的数字。

要让论坛响应迅速而不至于太慢，内存越多越好。所以，如果 1G 内存 + 2G 交换空间足够，那么 3G 内存 + 1G 交换空间也足够，并且性能可能更好。

我有两个论坛，都相当小，一个运行在 1+2 配置上，另一个运行在 2+2 配置上。

去年我写了这些：

> [@Ed\_S](#):
>
> 作为参考，我有两个小型论坛：
> 
> 较小的论坛使用 19G 磁盘中的 10G，备份各 200M，2000 篇文章，200 个主题，30 个用户。这是不到 2 年的活动量。
> 
> 较大的论坛使用 25G 磁盘中的 16G，备份各 700M，8000 篇文章，1000 个主题，300 个用户。这是超过 2 年的活动量。

编辑：如果你有足够的磁盘空间来添加交换空间，那就这样做吧——没有理由不这样做，而且可能需要。`free` 命令会告诉你使用了多少，`vmstat` 命令可以提供运行中的评论。但平均使用量不重要——峰值使用量才重要。

---

<div class="post-metadata">

### Author: ![meglio](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/meglio/32/71444_2.png) [@meglio](https://meta.discourse.org/u/meglio)
#### Post date: [2022 年6 月 4 日 09:41 UTC](https://meta.discourse.org/t/3g-ram-1g-partition-swap-is-it-enough/228951/12 "2022-06-04T09:41:04Z")

</div>

> [@Jonathan5](#):
>
> 如果您能提供更多关于您的论坛规模/繁忙程度的信息，我相信您会得到更详细的答复。

好的，我的问题更偏向理论性。我无法预测论坛的受欢迎程度。我想了解的是，在某些情况下，我应该怎么做来减轻内存不足的理论可能性。我不知道 Discourse 在什么时候消耗内存最多——是在进行备份时，还是在调整图片大小时，还是在通过管理员控制台更新时，还是……我一无所知。

所以我的想法是，我应该创建多大的交换文件，以确保在内存不足的情况下，Discourse 不会崩溃，只会变得非常慢。同时，我发现已经有一个 1G 的交换分区了，所以我的想法是，如果 3G 实际内存 + 1G 分区交换还不够……我是否也应该创建一个几 GB 的交换文件，并且优先级比分区交换（1G）更低。希望我的问题现在更清楚了。

> [@Jonathan5](#):
>
> 我认为 Discourse 安装程序会自动设置交换文件（我没有手动操作）——我想这回答了您问题的一部分。

如果它确实这样做了，那么是的。更新安装自述文件会很有用。从以前官方建议在安装自述文件中创建交换文件的时代过来的，我现在有点困惑，它是否是自动完成的，或者不再需要了，或者有其他原因将其从官方操作指南中移除。

> [@JammyDodger](#):
>
> 我认为它会在安装时创建一个 2GB 的交换文件，前提是它检测到您还没有。

……如果它检测到 1G 的交换分区，但还有基于分区的交换呢？

> [@Ed\_S](#):
>
> 编辑：如果您有磁盘空间可以添加交换，那就添加吧——没有理由不这样做，而且可能需要。

那么，我问题的延续是，拥有两个交换区域（一个基于分区，另一个基于文件）是个好主意吗？

---

<div class="post-metadata">

### Author: ![Ed\_S](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ed_s/32/134015_2.png) [@Ed\_S](https://meta.discourse.org/u/Ed_S)
#### Post date: [2022 年6 月 4 日 09:48 UTC](https://meta.discourse.org/t/3g-ram-1g-partition-swap-is-it-enough/228951/13 "2022-06-04T09:48:20Z")

</div>

完全没问题，可以拥有多个交换分区（或者多个交换文件）

我认为最大的内存峰值是在升级期间——届时论坛可能会宕机，直到你能获得帮助。

另外，值得将 overcommit 设置为更宽松的设置：如果你还没有调整过，你会在升级日志中找到相关说明。

> 警告 overcommit\_memory 设置为 0！在内存不足的情况下，后台保存可能会失败。要解决此问题，请将 ‘vm.overcommit\_memory = 1’ 添加到 /etc/sysctl.conf 中，然后重新启动或运行命令 ‘sysctl vm.overcommit\_memory=1’ 使其生效。

这之前已经被多次提及，但对于将其添加到标准的 Discourse 安装配置中存在阻力。这是一种无法在 docker 镜像内部完成的设置，必须在宿主机上完成。

---

<div class="post-metadata">

### Author: ![Ed\_S](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ed_s/32/134015_2.png) [@Ed\_S](https://meta.discourse.org/u/Ed_S)
#### Post date: [2022 年6 月 4 日 10:38 UTC](https://meta.discourse.org/t/3g-ram-1g-partition-swap-is-it-enough/228951/14 "2022-06-04T10:38:01Z")

</div>

> [@meglio](#):
>
> 我应该创建多大的交换文件来确保 Discourse 不会崩溃，而只是在内存不足时变得非常慢？

你所能做的就是降低风险，如果你有更多的资金，你可以更大程度地降低风险。这个问题属于权衡的范畴！

如果我有无限的磁盘空间，我肯定会添加高达 4G 的交换空间，然后再考虑其他问题——这不会有什么坏处。如果我有无限的资金，我会购买最大内存。但就我而言，我没有。

如果你预计你的论坛可能会增长，你应该期望随着时间的推移增加运行它所需的资源，而不是期望一次性配置好机器。

我还没有增加我用于论坛的机器的配置，但我预计我会，也许是今年，也许是明年。

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2022 年6 月 4 日 11:22 UTC](https://meta.discourse.org/t/3g-ram-1g-partition-swap-is-it-enough/228951/15 "2022-06-04T11:22:13Z")

</div>

应该可以。我通常会设置 1 和 2gb 的 droplet，并带有 2gb 的交换空间，它们都能正常工作。目前重建需要大量内存，但这应该可以。

> [@sunjam](#):
>
> 我无法想象在少于 8gb 内存的情况下运行 Discourse。

你需要更有想象力。

我只会在每月浏览量接近一百万且数据库相当大的网站上运行这么多内存。

---

<div class="post-metadata">

### Author: ![Jonathan5](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jonathan5/32/197134_2.png) [@Jonathan5](https://meta.discourse.org/u/Jonathan5)
#### Post date: [2022 年6 月 4 日 11:51 UTC](https://meta.discourse.org/t/3g-ram-1g-partition-swap-is-it-enough/228951/16 "2022-06-04T11:51:52Z")

</div>

> [@Ed\_S](#):
>
> 同样值得将 overcommit 设置为更宽松的设置：如果您还没有调整过，您会发现在您的升级日志中已经记录了这一点。
> 
> > 警告 overcommit\_memory 设置为 0！在内存不足的情况下，后台保存可能会失败。要解决此问题，请将 ‘vm.overcommit\_memory = 1’ 添加到 /etc/sysctl.conf，然后重新启动或运行命令 ‘sysctl vm.overcommit\_memory=1’ 使其生效。
> 
> 这之前已经提到过很多次了，但人们不愿意将其添加到标准的 Discourse 安装配方中。

我在首次安装 Discourse 时就提到了这一点（[Warnings: overcommit\_memory and Transparent Huge Pages](https://meta.discourse.org/t/warnings-overcommit-memory-and-transparent-huge-pages/166216?u=jonathan5%EF%BC%89%E3%80%82%E4%B8%BA%E4%BB%80%E4%B9%88%E8%BF%99%E6%A0%B7%E5%81%9A%E5%80%BC%E5%BE%97%EF%BC%8C%E4%BB%A5%E5%8F%8A%E9%98%BB%E5%8A%9B%E6%9D%A5%E8%87%AA%E5%93%AA%E9%87%8C%EF%BC%9F%E6%88%91%E6%B2%A1%E6%9C%89%E6%9B%B4%E6%94%B9%E9%BB%98%E8%AE%A4%E8%AE%BE%E7%BD%AE%E3%80%82)

---

<div class="post-metadata">

### Author: ![Ed\_S](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ed_s/32/134015_2.png) [@Ed\_S](https://meta.discourse.org/u/Ed_S)
#### Post date: [2022 年6 月 4 日 12:08 UTC](https://meta.discourse.org/t/3g-ram-1g-partition-swap-is-it-enough/228951/17 "2022-06-04T12:08:06Z")

</div>

> [@Jonathan5](#):
>
> 为什么这样做是值得的，以及阻力来自哪里？

这是我之前写的一篇文章：

> [@Failed to upgrade discourse instance to Feb 15 2022](https://meta.discourse.org/t/failed-to-upgrade-discourse-instance-to-feb-15-2022/218204/29?u=ed_s):
>
> I think it’s more than that - let me try to explain. The recommendation comes from redis, and redis recommends it because forking a process demands a lot of virtual memory, and redis forks to do background saves, and yet the virtual memory claimed is never going to be needed. This is typical for many unix applications: they will fork, but will not need to double their memory usage. Because it’s typical for many, and because this is a kernel setting which changes the behaviour for all processe…

特别是

> 开箱即用的内核将拒绝无法满足的分配。通过此调整，它将接受这些分配，失败可能会避免，或者可能会稍后在分配变为使用时发生。
> 
> 如果您的 RAM 和交换空间总量足够大，您将永远不需要更改此设置。如果总量不够大，更改它可能会有帮助。

还有

> > [@balupton](#):
> >
> > 或者更确切地说，这个建议的目的是什么？
> 
> 它是为了增加可用的虚拟内存量。（即 RAM 和交换空间的总和。）如果您耗尽了 RAM，您将开始遇到性能问题。但是，如果您耗尽了虚拟内存，进程将无法启动，或者会死亡或被杀死。这很残酷。
> 
> 我们那些 RAM 和磁盘都很小的人可能无法自由地添加大量的交换空间，但 2G 似乎是一个不错的最低限度。（如果您有 16G RAM，您可能不需要任何交换空间，但这是另一回事。当问题是事物失败时，重要的是两者的总和。）

至于阻力，我认为是因为人们认为此更改是为了 redis 的利益，而大多数人不需要它。

编辑：[这个最近的帖子](https://meta.discourse.org/t/failed-to-boostrap-exit-code-137/228941) 可能是个例子，一个小型实例耗尽了内存，并且没有设置 overcommit。但我们不知道设置 overcommit 是否会解决这个问题——该用户升级到了 8G RAM。
