【问题标题】:PostgreSQL installation error -- Cannot allocate memoryPostgreSQL 安装错误——无法分配内存
【发布时间】:2012-09-08 04:00:54
【问题描述】:

我正在尝试从 sqlite3 切换到 PostgreSQL 以在 Rails 中进行开发,这样我就不会遇到任何 heroku 问题。我遵循了关于 heroku 和链接到 Railscast 的建议,但是在 brew 安装 postgresql 后遇到了以下错误。

在 /usr/local/var/postgres/base/1 中创建 template1 数据库 ...

致命:无法创建共享内存段:无法分配内存

详细信息:失败的系统调用是 shmget(key=1, size=2072576, 03600)。

提示:这个错误通常意味着 PostgreSQL 对共享内存段的请求超出了可用内存或交换空间,或者 超出了内核的 SHMALL 参数。您可以减少 请求大小或使用更大的 SHMALL 重新配置内核。减少 请求大小(目前为 2072576 字节),减少 PostgreSQL 的共享 内存使用,可能通过减少 shared_buffers 或 max_connections。

我已经浏览了一些文档,但我是新手,对内存和数据库如何工作知之甚少,我认为这里的某个人可能能够更好地为我指明正确的方向比我自己能找到的。知道如何解决这个问题吗?我的电脑是新的而且比较花哨,如果它内存不足,我会感到惊讶,所以我不知道减少“共享内存使用”是否是正确的想法(如果我完全了解发生了什么) .

编辑:应该早点提出来。这是导致错误的命令(构建数据库):

initdb /usr/local/var/postgres -E utf8

【问题讨论】:

  • 试试 Postgres.app。我已经使用它几个月了。完美运行。

标签: ruby-on-rails postgresql memory-management heroku


【解决方案1】:

从数据库路径来看,我猜你使用的是 Mac OS X。

由于大多数流行的 Linux 发行版都有一个位于 /var/lib 中的数据库目录。

在谷歌上搜索后,我发现了这个: Fixing the postgresql initdb fatal shared memory error on Leopard

希望对您有所帮助。

为了您的方便,我从上面的链接中复制了这些说明。

运行这些命令:

sudo sysctl -w kern.sysv.shmall=65536
sudo sysctl -w kern.sysv.shmmax=16777216

或编辑 /etc/sysctl.conf 以进行永久更改

kern.sysv.shmall=65536
kern.sysv.shmmax=16777216 

【讨论】:

  • 是的,这行得通,这是how I felt when I saw it work
  • 永远不要只用链接回答,因为参考页面可能会停止工作 - 就像现在一样。
【解决方案2】:

由于答案中的页面引用不存在,这里有更多关于如何在 Mac 上设置共享内存的详细信息。

确保您的系统配置为允许使用更大量的共享内存。请注意,这不会“保留”任何内存,因此可以安全地配置比您最初可能需要的值高得多的值。您可以通过编辑 文件/etc/sysctl.conf - 例如

sudo nano /etc/sysctl.conf

在配备 2GB RAM 的 MacBook Pro 上,sysctl.conf 示例包含:

kern.sysv.shmmax=1610612736
kern.sysv.shmall=393216
kern.sysv.shmmin=1
kern.sysv.shmmni=32
kern.sysv.shmseg=8
kern.maxprocperuid=512
kern.maxproc=2048

注意 (kern.sysv.shmall * 4096) 应该大于或等于 kern.sysv.shmmaxkern.sysv.shmmax 也必须是 4096 的倍数。

编辑(或创建)文件后,重新启动。 如果您想检查当前正在使用的设置 内核,您可以使用 sysctl 实用程序:

sysctl -a

享受吧!

【讨论】:

    【解决方案3】:

    您必须更改并重新启动:

    sudo vim /etc/sysctl.conf
    

    对于 2 GB 的 mac os x

    kern.sysv.shmall=393216
    kern.sysv.shmmax=1610612736
    

    对于 4 GB 的 mac os x

    kern.sysv.shmall=786432
    kern.sysv.shmmax=3221225472
    

    适用于 8 GB 的 mac os x

    kern.sysv.shmall=786432 * 2
    kern.sysv.shmmax=3221225472 * 2 
    

    等等……

    【讨论】:

      猜你喜欢
      • 2015-03-26
      • 2016-07-27
      • 2013-09-16
      • 1970-01-01
      • 2018-12-23
      • 2017-12-07
      • 2016-04-17
      • 1970-01-01
      • 2020-01-14
      相关资源
      最近更新 更多