我在 16GB Linode(Ubuntu 12.04 32 位)上运行专用 PostgreSQL。我尝试使用 pgtune,但会遇到共享内存错误。例如
The PostgreSQL server failed to start. Please check the log output:
2014-02-10 08:32:39 EST FATAL: could not create shared memory segment: Invalid argument
2014-02-10 08:32:39 EST DETAIL: Failed system call was shmget(key=5432001, size=4107419648, 03600).
2014-02-10 08:32:39 EST 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 4107419648 bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections.
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
因此,我继续调整 SHMAX,但我真的不确定应该将其设置为多少。我希望 pgtune 会通知我,或者我可以找到有关此内容的一些文档 @ linode。我假设这个值以字节为单位?我读到它应该是总内存的 1/4 到 1/2(即 4 或 8 GB)之间的任何值,但当你使用 32 位时,它不应超过 4GB。
有什么建议吗?您建议将 SHMAX 设置为多少以及为什么?我应该放弃 pgtune 还是将最大内存参数传递给它?
谢谢!
VPS 内存详细信息:
total used free shared buffers cached
Mem: 16617352 334320 16283032 0 18132 208400
-/+ buffers/cache: 107788 16509564
Swap: 524284 0 524284
- 更新 -
迁移到 64 位确实使一切正常。SHMAX 被接受(顺便说一下,单位是字节)。弄清楚要将其设置为多少时,我只使用了机器上可用 RAM 的一半(在 Ubuntu 上输入“free -b”以查看以字节为单位的内存)。
我基本上采纳了 pgtune 的建议,对其余部分做了一些小的调整。
apt-get install pgtune
答案1
您在具有 16GB RAM 的计算机上安装了 32 位操作系统。这行不通。即使 32 位操作系统在技术上可以使用超过 4GB 的 RAM,操作系统上的任何单个进程都不能超出该界限。重新开始并安装 64 位操作系统,这个问题就会消失(以及您将遇到的所有其他问题)。