这是一个常见的错误消息,有许多常规答案对我不起作用。
我认为我已经将这个特殊问题隔离到了符号链接到外部硬盘驱动器的PostgreSQL数据目录中。
FATAL: could not create shared memory segment: No space left on device
DETAIL: Failed system call was shmget(key=5432001, size=56, 03600).
HINT: This error does *not* mean that you have run out of disk space. It occurs either if all available shared memory IDs have been taken, in which case you need to raise the SHMMNI parameter in your kernel, or because the system's overall limit for shared memory has been reached.
$ sysctl -a | grep sysv
kern.sysv.shmmax: 412316860416
kern.sysv.shmmin: 8
kern.sysv.shmmni: 64
kern.sysv.shmseg: 128
kern.sysv.shmall: 100663296
$ sudo cat /etc/sysctl.conf
kern.sysv.shmmax=412316860416
kern.sysv.shmmin=8
kern.sysv.shmmni=64
kern.sysv.shmseg=128
kern.sysv.shmall=100663296
PostgreSQL版本9.4.15。在我的PostgreSQL配置中
shared_buffers = 128MB
不知道还有哪些其他设置。
其他环境详细信息:
带有数据目录的外部硬盘驱动器仅具有50%的容量。发生这种情况时,我的RAM使用量约为60%。
我无法确定重现该错误的确切步骤集。我有一个带有PostgreSQL数据目录的外部硬盘驱动器,一个带有另一个数据目录的本地文件夹。在我的项目中,我将符号链接到一个或另一个,这取决于我要使用的数据副本。据我所知,仅当我正在关闭符号链接的硬盘驱动器并且在不停止服务器的情况下拔出插头然后再将其重新插入时,才会出现此问题。但是当我执行这些操作时,并不会每次都发生步骤。
鉴于上述说明,我不希望任何人能够指出具体问题。
但是,下次我处于错误状态时,如何获得更多有用的信息?是否有任何系统命令可以帮助您确定确切的问题?
...如果获取了所有可用的共享内存ID(在这种情况下,您需要在内核中提高SHMMNI参数),或者因为达到了系统对共享内存的整体限制,就会发生这种情况。
如何检查if all available shared memory IDs have been taken
或the system's overall limit for shared memory has been reached
以及答案如何处理?