PostgreSQL安装错误 – 无法分配内存
我正在尝试从sqlite3切换到PostgreSQL以便在Rails中进行开发,这样我就没有任何heroku问题。 我正在遵循heroku和链接到Railscast的建议,但在安装postgresql后我遇到了以下错误。
在/ usr / local / var / postgres / base / 1中创建template1数据库…
致命:无法创建共享内存段:无法分配内存
详细信息:失败的系统调用是shmget(key = 1,size = 2072576,03600)。
提示:此错误通常意味着PostgreSQL对共享内存段的请求超出了可用内存或交换空间,或超出了内核的SHMALL参数。 您可以减小请求大小或使用更大的SHMALL重新配置内核。 要减少请求大小(当前为2072576字节),可以通过减少shared_buffers或max_connections来减少PostgreSQL的共享内存使用量。
我对文档进行了一些讨论,但我是新手,对内存和数据库的工作方式知之甚少,而且我认为这里的某个人可能能够指出我的方向比我能做得好得多自己找。 知道如何解决这个问题吗? 我的计算机是新的,相对花哨,如果内存耗尽,我会感到惊讶,所以我不知道减少“共享内存使用”是否是正确的想法(如果我理解发生了什么) 。
编辑:应该早点提出来。 这是导致错误的命令(构建数据库):
initdb /usr/local/var/postgres -E utf8
从数据库路径,我猜你使用的是Mac OS X.
由于大多数流行的Linux发行版都有一个驻留在/ var / lib中的数据库目录。
经过对Google的一些搜索后,我发现了这一点: 修复了Leopard上的postgresql initdb致命共享内存错误
希望它有所帮助。
为方便起见,我从上面的链接复制了这些说明。
运行以下命令:
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
由于答案中的页面引用不存在,因此以下是有关如何在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.shmmax
。 kern.sysv.shmmax
也必须是4096
的倍数。
编辑(或创建)文件后,重新启动。 如果要检查内核当前使用的设置,可以使用sysctl实用程序:
sysctl -a
请享用!
您必须更改并重新启动:
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
等……
- 操作超时 – 连接(2)(Errno :: ETIMEDOUT)
- 由于DOTENV未初始化的常量错误,无法推送到Heroku
- Rails,Heroku不加载我的lib
- Heroku rake任务未初始化为MongoMapper模型的常量
- 如何确定在Heroku Performance dyno上运行的Puma工作者和线程的正确数量?
- 是否可以在Heroku Cedar上运行capybara-webkit(即forked webkit_server)?
- IMAP闲置如何工作?
- 如何远程检查RedisCloud DB中的数据?
- 在使用Action Cable(Puma端口侦听)的同时将Ruby on Rails应用程序部署到Heroku