could not create semaphores: No space left on device

在postgres中,当max_connect设置过大,启动的时候会报错:

FATAL:  could not create semaphores: No space left on device

创建semaphores时空间参数不够,查询官网,有这么一段解释:

HINT:  This error does *not* mean that you have run out of disk space.  It occurs when either the system limit for the maximum number of semaphore sets (SEMMNI), or the system wide maximum number of semaphores (SEMMNS), would be exceeded.  You need to raise the respective kernel parameter.  Alternatively, reduce PostgreSQL's consumption of semaphores by reducing its max_connections parameter.
The PostgreSQL documentation contains more information about configuring your system for PostgreSQL.
解决的方法是改小max_connect,当业务不允许的情况下,修改内核参数,max_connect相关的内核参数有:

 

 下面介绍如何修改内核参数

复制代码
复制代码
# ipcs -ls
 
------ Semaphore Limits --------
max number of arrays = 1280
max semaphores per array = 50100
max semaphores system wide = 64128000
max ops per semop call = 50100
semaphore max value = 32767
 
 
# cat  /proc/sys/kernel/sem
SEMMSL   SEMMNS         SEMOPM  SEMMNI
50100   128256000       50100   2560
复制代码
复制代码
SEMMSL 每个信号量set中信号量最大个数
SEMMNS linux系统中信号量最大个数
SEMOPM semop系统调用允许的信号量最大个数设置,设置成和SEMMSL一样即可
SEMMNI  linux系统信号量set最大个数
 
所以SEMMNS=SEMMSL*SEMMNI
修改 vi /etc/sysctl.conf 的以下参数
kernel.sem = 50100 128256000 50100 2560
sysctl -p生效
重启数据库即可
但行好事,莫问前程
posted @   邱明成  阅读(737)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
历史上的今天:
2019-08-31 条件覆盖,路径覆盖,语句覆盖,分支覆盖
2017-08-31 MultipartFile的使用小结
点击右上角即可分享
微信分享提示