openGauss报错:Too many open files,解决方案
操作系统信息
Linux user-pc 5.4.18-87.76-generic #gfb16-KYLINOS SMP Thu Aug 31 09:05:44 UTC 2023 aarch64 aarch64 aarch64 GNU/Linux
解决方案
当前使用gsql -d postgres -p 5432 -r命令登录数据的时候,报错如下:
gsql: FATAL: could not look up local user ID 1002: Too many open files
报错信息 gsql: FATAL: could not look up local user ID 1002: Too many open files指出系统达到了打开文件的数量上限,并且是在尝试查找本地用户ID时发生的。这个问题通常与操作系统的资源限制有关,而不是特定的代码实现问题。
要解决这个问题,你需要增加操作系统允许的文件打开数量。以下是在Linux系统上解决此问题的步骤:
1,临时增加文件打开数量限制:
使用 ulimit 命令临时增加当前会话的文件打开数量限制。
ulimit -n 65535
2,永久增加文件打开数量限制:
编辑 /etc/security/limits.conf 文件,添加或修改以下行来永久增加限制。
* soft nofile 65535
* hard nofile 65535
这里的 * 表示对所有用户生效。你也可以指定特定的用户名来仅对特定用户生效。
3,应用限制并重启服务:
修改完 /etc/security/limits.conf 文件后,你需要重启系统或至少重启受影响的服务(如openGauss数据库服务)来使更改生效。
4,检查并关闭不必要的应用程序:
确保没有不必要的应用程序或服务占用文件句柄。
5,优化数据库配置:
检查并优化openGauss的配置,以减少不必要的文件打开请求。
进一步解决问题
通过上面的步骤一般情况下是可以解决问题的,但是现在我们重启服务后,发现问题依然存在,此时我们查看看一下数据库进程。
omm@user-pc:/media/user/D/datanode/gsdn$ systemctl status openGauss.service
● openGauss.service - 華為openGauss數據庫服務...
Loaded: loaded (/etc/systemd/system/openGauss.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2024-08-29 16:28:35 CST; 1h 7min ago
Process: 180477 ExecStart=/usr/local/bin/gs_ctl start -D /media/user/D/datanode/gsdn (code=exited, status=0/SUCCESS)
Main PID: 180483 (gaussdb)
Tasks: 38 (limit: 18929)
Memory: 2.3G
CGroup: /system.slice/openGauss.service
└─180483 /media/user/D/openGauss-server/dest/bin/gaussdb -D /media/user/D/datanode/gsdn
从上面的数据信息可以得到openGauss的进程ID是180483,下面我们统计一下该进程的打开数量。
user@user-pc:~$ sudo lsof -p 180483 | wc -l
输入密码
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
Output information may be incomplete.
1274
上面的输出信息得到打开数量为1274
我们看一下该进程的limits信息
user@user-pc:~$ cat /proc/180483/limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 63099 63099 processes
Max open files 1024 524288 files
Max locked memory 65536 65536 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 63099 63099 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us
到此问题找到了,进程实际限制的1024个,但是实际打开了1274个,故报此错误。
由于上面我们已经设置了,但是发现并没有生效,什么原因呢?
猜测有没有可能是被系统级设置覆盖了。
omm@user-pc:/media/user/D/datanode/gsdn$ cat /etc/systemd/system.conf
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See systemd-system.conf(5) for details.
[Manager]
#LogLevel=info
#LogTarget=journal-or-kmsg
#LogColor=yes
#LogLocation=no
#DumpCore=yes
#ShowStatus=yes
#CrashChangeVT=no
#CrashShell=no
#CrashReboot=no
#CtrlAltDelBurstAction=reboot-force
#CPUAffinity=1 2
#NUMAPolicy=default
#NUMAMask=
#RuntimeWatchdogSec=0
#RebootWatchdogSec=10min
#ShutdownWatchdogSec=10min
#KExecWatchdogSec=0
#WatchdogDevice=
#CapabilityBoundingSet=
#NoNewPrivileges=no
#SystemCallArchitectures=
#TimerSlackNSec=
#StatusUnitFormat=description
#DefaultTimerAccuracySec=1min
#DefaultStandardOutput=journal
#DefaultStandardError=inherit
#DefaultTimeoutStartSec=90s
#DefaultTimeoutAbortSec=
#DefaultRestartSec=100ms
#DefaultStartLimitIntervalSec=10s
#DefaultStartLimitBurst=5
#DefaultEnvironment=
#DefaultCPUAccounting=no
#DefaultIOAccounting=no
#DefaultIPAccounting=no
#DefaultBlockIOAccounting=no
#DefaultMemoryAccounting=yes
#DefaultTasksAccounting=yes
#DefaultTasksMax=
#DefaultLimitCPU=
#DefaultLimitFSIZE=
#DefaultLimitDATA=
#DefaultLimitSTACK=
#DefaultLimitCORE=
#DefaultLimitRSS=
#DefaultLimitNOFILE=1024:524288
#DefaultLimitAS=
#DefaultLimitNPROC=
#DefaultLimitMEMLOCK=
#DefaultLimitLOCKS=
#DefaultLimitSIGPENDING=
#DefaultLimitMSGQUEUE=
#DefaultLimitNICE=
#DefaultLimitRTPRIO=
#DefaultLimitRTTIME=
从上面的信息可以看出系统级默认限制是1024个,那我们就更改一下这里的数量,设置为DefaultLimitNOFILE=65535:524288,更新后重启数据库。
再次查看,openGauss进程的limits信息,如下
omm@user-pc:/media/user/D/datanode/gsdn$ cat /proc/180483/limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 63099 63099 processes
Max open files 65535 524288 files
Max locked memory 65536 65536 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 63099 63099 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us
查看数据库日志,发现Too many open files错误信息消失,下面我们通过gsql命令工具登录数据库。
omm@user-pc:/media/user/D/datanode/gsdn$ gsql -d postgres -p 5432 -r
gsql ((openGauss 6.0.0 build ) compiled at 2024-08-06 17:27:08 commit 0 last mr )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
openGauss=#
登录成功!
到这里,这个问题也就解决了。
文章转载自:https://blog.csdn.net/u010490822/article/details/141684863
-------------------------------------------
个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本