openGauss 数据库报错“failed: To0 many open files”

openGauss 数据库报错"failed: To0 many open files"

报错:

最近在测试搭建测试高斯数据库的时候,发现当应用程序和数据库对接完成之后,经常是运行一段时间就应用就挂了,去查看了应用程序日志,发现了如下报错:

failed: To0 many open files,这个报错一般是应用程序或者是用户的文件描述符 被限制导致的,在Linux系统中,每个用户和程序的 文件描述符,都是默认被限制到了 1024的,

排查流程

看到上述报错可以确定,数据库无法连接的原因就是因为文件描述符 被限制导致的,所以我查看当前用户、omm(运行数据库用户),以及limit.conf配置。


看带上面三个配置可以发现,我们关于文件最大描述附最大值是配置到100000的,理论上是不会被耗尽的。接下来查看一下,当前已打开的文件数量

powershell 复制代码
# 查看特定 PostgreSQL 进程打开的文件描述符数量(替换 <PID> 为实际进程 ID)
ls -l /proc/<PID>/fd | wc -l

# 查看该进程的具体限制配置
cat /proc/<PID>/limits | grep "Max open files"

通过cat /proc/<PID>/limits查看发现这里显示的文件描述最大值还是1024。

问题定位

后来通过在网上查询之后才发现,因为如果进程是通过systemd的方式去管理的话。进程启动的时候是不会读取max-limits.conf的配置文件,还是会使用默认的1024,这个时候就需要我们去修改systemd 的启动脚本来指定 Max open files 。

在启动脚本的【Service】中添加

powershell 复制代码
LimitNOFILE=65536
LimitNPROC=65536

修改完之后记得reload一下systemd配置在重启数据库

powershell 复制代码
systemctl  daemon-reload
systemctl  restart opengauss.service

解决验证

重启之后,在查看文件描述符限制,可以看到就变成了我们修改的数值了,再重启应用程序后正常。

相关推荐
Avan_菜菜15 小时前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
Nturmoils20 小时前
订单列表慢查询,先看 WHERE、ORDER BY 和 LIMIT
数据库
渣波1 天前
拒绝 SQL 焦虑!手把手带你用 NestJS + Prisma + DTO 写出“防弹”级后端代码
javascript·数据库·后端
SelectDB2 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
倔强的石头_2 天前
KingbaseES 新版MySQL 兼容版体验:旧版迁移 + 功能实测
数据库
XIAOHEZIcode3 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220704 天前
如何搭建本地yum源(上)
运维
倔强的石头_5 天前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库
冬奇Lab5 天前
每日一个开源项目(第134篇):Zvec - 阿里开源的嵌入式向量数据库,向量搜索界的 SQLite
数据库·人工智能·llm
ClouGence6 天前
Oracle CDC 架构优化:从主库直连到 DataGuard 备库同步
数据库·后端·oracle