我注意到有几个关于Postgres(10)由于共享内存而无法 Boot 的问题;尽管如此,我还是不能让它运行。现在每次我尝试启动集群时,我总是得到这个错误:
2021-10-24 10:13:43.269 UTC [11253] FATAL: could not map anonymous shared memory: Cannot allocate memory
2021-10-24 10:13:43.269 UTC [11253] HINT: This error usually means that PostgreSQL's request for a shared memory segment exceeded available memory, swap space, or huge pages. To reduce the request size (currently 5507432448 bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections.
我尝试检查并修改内核shmall参数,但没有成功。
x一个一个一个一个x一个一个二个x
我不能减少内存到配置文件,因为这些是我必须使用的设置,虽然我尝试了,但没有成功(我甚至使用了最小值)。
谢谢你的帮助!
编辑1:
好吧,我发现了一些奇怪的事情:
1.我从系统中彻底清除了postgresql
1.我重新安装了postgresql
1.启动群集,一切正常
1.已停止群集并使用所需设置编辑配置文件
1.尝试再次启动群集,但出现相同的错误
1.已恢复为默认配置文件,但仍然收到相同的错误。为什么会发生这种情况?
系统有16 GB的RAM。
编辑2:添加详细信息
好的,基本上我必须通过移动数据目录来迁移postgresql数据库。这是唯一可以做的事情。完全移动数据目录后,这里有错误。我注意到没有交换内存,所以我创建了它,但仍然是同样的错误。
两个服务器之间的共享内存和段基本相同。当我启动集群时它立即失败,所以也许这可以给你一个线索。目标服务器是一台EC2机器。
我不知道我还能做什么。
编辑3:其他详细信息
下面是命令lsipc显示的内容:
RESOURCE DESCRIPTION LIMIT USED USE%
MSGMNI Number of message queues 32000 0 0.00%
MSGMAX Max size of message (bytes) 8192 - -
MSGMNB Default max size of queue (bytes) 16384 - -
SHMMNI Shared memory segments 4096 0 0.00%
SHMALL Shared memory pages 18446744073692774399 0 0.00%
SHMMAX Max size of shared memory segment (bytes) 18446744073692774399 - -
SHMMIN Min size of shared memory segment (bytes) 1 - -
SEMMNI Number of semaphore identifiers 32000 0 0.00%
SEMMNS Total number of semaphores 1024000000 0 0.00%
SEMMSL Max semaphores per semaphore set. 32000 - -
SEMOPM Max number of operations per semop(2) 500 - -
SEMVMX Semaphore max value 32767 - -
这些值与我试图迁移的源机器相同。数据目录与原始目录相同,但每次我执行此命令时:
sudo pg_ctlcluster 10 main start
我得到了同样的错误。我真的需要帮助!
2条答案
按热度按时间sqxo8psd1#
我也遇到过类似的问题。当你使用Postgresql数据库时,你应该创建/提供与shared_buffers值相同或更大的交换空间。
如何创建交换文件(例如8 GB):
然后将交换文件添加到/etc/fstab:
hjzp0vay2#
正如文档所述:
默认情况下,PostgreSQL分配非常少量的System V共享内存,以及大量的匿名
mmap
共享内存。因此,除非您将
shared_memory_type
更改为sysv
,否则您的内核配置是完全无关紧要的。我可以想到两个可能的错误原因:
shared_buffers
设置得太大,或因为其他进程使用了太多内存,或因为已经有大量共享内存Map用于其他用途。huge_pages = on
,但是没有定义大型页面。