postgresql在Lion OS X上出现以下错误

3
 Failed system call was shmget(key=5432001, size=16498688, 03600).
HINT:  This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter.  You can either reduce the request size or reconfigure the kernel with larger SHMMAX.  To reduce the request size (currently 16498688 bytes), reduce PostgreSQL's shared_buffers parameter (currently 1536) and/or its max_connections parameter (currently 104).
    If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for.
    The PostgreSQL documentation contains more information about shared memory configuration.

1
你觉得这条消息的哪一部分让你感到困惑? - Milen A. Radev
4个回答

10

您可以使用以下命令为当前会话设置内存:

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

这将允许Postgres启动。

要使其在重新启动后保持生效,您需要创建或编辑文件/etc/sysctl.conf,并包含以下内容:

kern.sysv.shmmax=16777216
kern.sysv.shmall=4096

4
编辑 /etc/sysctl.conf 并重新启动对我有用:

编辑 /etc/sysctl.conf 并重新启动对我有用。

kern.sysv.shmmax=1610612736
kern.sysv.shmmin=1
kern.sysv.shmmni=256
kern.sysv.shmseg=64
kern.sysv.shmall=393216

奇怪的是,PostgreSQL安装程序已经抱怨了错误的共享内存设置,并建议更改sysctl.conf。但显然,shmmaxshmall的值仍然太小。


2
正如Ortwin所提到的,您需要编辑/etc/sysctl.conf文件。在干净的Mac OS/X Lion安装中,该文件实际上并不存在,您需要创建它。上面列出的参数对于大型机器来说是合理的-这将为共享内存分配高达1.5GB的空间。如果您只有2GB内存,您可能希望使用更少的内存。

在我的Mac上,我将256MB的内存分配给共享内存,使用以下行:

kern.sysv.shmmax=268435456

我找到的两个在研究这个问题时很有帮助的链接如下:

http://www.spy-hill.net/help/apple/SharedMemory.html - 讨论了Darwin上的共享内存

以及

http://archives.postgresql.org/pgsql-patches/2006-02/msg00176.php

提供一些关于PostgreSQL这个问题的历史背景。

1
这与PostgreSQL配置文件中的共享内存参数(shared_buffers)有关。Linux也有设置来限制应用程序可以请求的内存量。这些设置存储在三个文件中:-
/proc/sys/kernel/shmall
/proc/sys/kernel/shmmax
/proc/sys/kernel/shmmni
其中一个或多个文件需要进行修改,或者使用“sysctl”可执行文件。请向系统管理员询问此事。错误消息告诉您值应该是什么。然后,PostgreSQL应该能够正常启动。
如果无法更改值,请将shared_buffers参数减少到低于阈值的点。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接