我最近从 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 是否可能抛出这个错误——我认为这就是交换的全部意义所在?