Postgres:失败的系统调用是 shmget(key=3879116,size=56,03600)

Postgres:失败的系统调用是 shmget(key=3879116,size=56,03600)

我最近从 2013 年的 Macbook Pro 升级到了 M1 iMac 2021。这是使用我的旧 Macbook 存储在 Time Machine 中的数据完成的。旧 Macbook 运行 Postgres 从来没有出现过问题。但是当我完成新 Mac 的设置并准备启动我的开发环境时,Postgres 开始无法启动。

当我尝试使用brew services start postgresql它时,它报告成功了。但是当我尝试psql进入它时,它失败了。查看日志后,具体错误是:

2022-05-20 21:47:03.244 MST [48487] 严重错误:无法创建共享内存段:无法分配内存
2022-05-20 21:47:03.244 MST [48487] 详细信息:失败的系统调用是 shmget(key=1559810, size=56, 03600)。2022-05-20 21:47:03.244 MST [48487] 提示:此错误通常意味着 PostgreSQL 对共享内存段的请求超出了内核的 SHMALL 参数。您可能需要使用更大的 SHMALL 重新配置内核。PostgreSQL 文档包含有关共享内存配置的更多信息。

在我的系统上kern.sysv.shmax是 4194304,kern.sysv.schmall是 1024。讽刺的是,我检查了我的旧 Macbook,发现这两个变量的值也完全相同。这是从旧 Mac 向新 Mac 传输数据时出现问题的第一个迹象。第二个迹象是 Stack Exchange 网站上关于本地开发环境中此问题的帖子很少。然后第三个迹象是,在我看到的几乎所有错误中,错误中的“size”参数都大于参数shmall(03600)。

我想知道除了系统变量值之外,是否有人知道这个问题的根源。例如,为什么shmall在旧的 MacBook Pro 上,参数 1024 是完全没问题的,但在新的 Mac 上运行相同的 PostgreSQL 实例(取自 Time Machine 映像)时,它突然需要更大的shmall值。然后,Postgres 是一个非常流行的数据库,新的 M1 非常流行,所以你会认为,如果这是在较新的 Mac 上旋转实例的结果,那么 Stack Exchange 网站上会有更多与此相关的最新活动,但似乎没有。

这让我相信,这个问题是由于在迁移到新 Mac 的过程中犯了一个错误,而不是这些变量的当前值的问题。这意味着将值更改为 Postgres 当前期望的值并不能解决问题的根源。这正是我在这里尝试做的。

如果打开的应用程序占用了太多的 RAM,Postgres 是否可能抛出这个错误——我认为这就是交换的全部意义所在?

相关内容