这真让人费解 
刚刚迁移了一个 Discourse 实例到新服务器。
在日志中看到这个错误:PG::DiskFull (ERROR: could not resize shared memory segment “/PostgreSQL.1759815625” to 8388608 bytes: No space left on device )
这很奇怪,因为我之前的服务器(64GB 内存)没有这个问题,而且我设置了:
db_shared_buffers: "25632MB"
db_work_mem: "160MB"
在新服务器(128GB 内存)上,我无法增加到默认值以上(我尝试将以下值增加三倍,但得到相同的 PG DiskFull 错误):
db_shared_buffers: "128MB"
db_work_mem: "40MB"
之前的机器上安装了 Docker 27.x(通过 discourse 安装程序自动安装)。新机器按照说明安装了 docker.io(所以是 26.x)。我尝试切换到 Docker 27.x 看看是否有关联,但没有改变任何东西。两者都运行在 Stable Discourse 分支,版本是 3.3.2。
看起来 shm_size 可能是主要原因:
不过我不知道为什么前一台服务器没有这个问题,而新服务器却出现了。唯一的其他主要区别是旧服务器使用 Ubuntu 22.04 LTS,而新服务器使用的是 24.04 LTS。
我也尝试过这个,但更改在容器重新启动后被覆盖了
shm_size 似乎被硬编码到启动器中了:
任何见解或帮助都将不胜感激! 

谢谢 @pfaffman - 我一开始也这么想,但后来我读了这个帖子:
还有很多可用空间 
1 个赞
一个快速的胶带修复方法是像这样编辑启动器文件:
cd /var/discourse
vi launcher
然后将所有 3 处出现的 --shm-size=512m 替换为您想要的内存量(我选择了系统内存的 50%)。
然后重新构建。每次启动器更新时都需要再次编辑它。
目前似乎能解决问题。

1 个赞
所以,如果其他人遇到此问题,以上方法解决了我的问题。我不再需要在启动器中编辑 shm-size。
这是在重建过程中注意到此警告后发现的:
WARNING 必须启用内存超额分配!否则,在内存不足的情况下,后台保存或复制可能会失败。禁用它也可能在内存不足的情况下导致失败,请参阅 https://github.com/jemalloc/jemalloc/issues/1328。要解决此问题,请将 'vm.overcommit_memory = 1' 添加到 /etc/sysctl.conf,然后重新启动或运行命令 'sysctl vm.overcommit_memory=1' 使其生效。
2 个赞