PostgreSQL启动报错“could not map anonymous shared memory: Cannot allocate memory”

PostgreSQL启动报错"could not map anonymous shared memory: Cannot allocate memory"

bash 复制代码
基础信息
OS版本:Red Hat Enterprise Linux Server release 7.9 (Maipo)
DB版本:16.2
pg软件目录:/home/pg16/soft
pg数据目录:/home/pg16/data
端口:5777

报错

bash 复制代码
[pg16@test ~]$ pg_ctl start
waiting for server to start....2024-06-01 22:20:02.156 PDT [68668] DEBUG:  registering background worker "logical replication launcher"
2024-06-01 22:20:02.157 PDT [68668] DEBUG:  loaded library "pg_stat_statements"
2024-06-01 22:20:02.157 PDT [68668] FATAL:  could not map anonymous shared memory: Cannot allocate memory
2024-06-01 22:20:02.157 PDT [68668] 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 295698432 bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections.
2024-06-01 22:20:02.157 PDT [68668] LOG:  database system is shut down
 stopped waiting
pg_ctl: could not start server
Examine the log output.

PostgreSQL 请求的共享内存段超出了当前可用的内存、交换空间或大页内存 (huge pages)。当前请求的内存大小为 295,698,432 字节(约 282 MB)。

分析记录

bash 复制代码
[pg16@test ~]$ cat data/postgresql.conf |grep shared
shared_buffers = 256MB                  # min 128kB
#shared_memory_type = mmap              # the default is the first option
dynamic_shared_memory_type = posix      # the default is usually the first option
#min_dynamic_shared_memory = 0MB        # (change requires restart)
#wal_buffers = -1                       # min 32kB, -1 sets based on shared_buffers
shared_preload_libraries = 'pg_stat_kcache,pg_stat_statements,auto_explain'     # (change requires restart)
[pg16@test ~]$ cat /proc/meminfo |grep Huge
AnonHugePages:    942080 kB
HugePages_Total:     150
HugePages_Free:        7
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

发现空闲的大页只有7个,不满足pg的启动需求,故报错。最终发现是其它数据库进程占用了,停了之后pg可以正常启动。

解决

bash 复制代码
[pg16@test log]$ pg_ctl start
waiting for server to start....2024-06-02 06:43:45.043 PDT [3636] DEBUG:  registering background worker "logical replication launcher"
2024-06-02 06:43:45.043 PDT [3636] DEBUG:  loaded library "pg_stat_statements"
2024-06-02 06:43:45.051 PDT [3636] LOG:  redirecting log output to logging collector process
2024-06-02 06:43:45.051 PDT [3636] HINT:  Future log output will appear in directory "log".
 done
server started

谨记:心存敬畏,行有所止。

相关推荐
小和尚同志16 分钟前
29.4k!使用 1Panel 来管理你的服务器吧
linux·运维
小米里的大麦9 天前
014 Linux 2.6内核进程调度队列(了解)
linux·运维·驱动开发
程序员的世界你不懂9 天前
Appium+python自动化(三十)yaml配置数据隔离
运维·appium·自动化
我科绝伦(Huanhuan Zhou)9 天前
Oracle|Oracle SQL*Plus 配置上下翻页功能
数据库·sql·oracle
Cachel wood9 天前
Spark教程6:Spark 底层执行原理详解
大数据·数据库·分布式·计算机网络·spark
算法练习生9 天前
Linux文件元信息完全指南:权限、链接与时间属性
linux·运维·服务器
浩浩测试一下9 天前
渗透测试指南(CS&&MSF):Windows 与 Linux 系统中的日志与文件痕迹清理
linux·运维·windows·安全·web安全·网络安全·系统安全
java—大象9 天前
基于java SSM的房屋租赁系统设计和实现
java·开发语言·数据库·spring boot·layui·mybatis
Mutig_s9 天前
Spring Boot动态数据源切换:优雅实现多数据源管理
java·数据库·spring boot·后端·mybatis
Python小老六9 天前
单片机测ntc热敏电阻的几种方法(软件)
数据库·单片机·嵌入式硬件