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
  1. 永久增加文件打开数量限制
    编辑 /etc/security/limits.conf 文件,添加或修改以下行来永久增加限制。
   *               soft    nofile          65535
   *               hard    nofile          65535

这里的 * 表示对所有用户生效。你也可以指定特定的用户名来仅对特定用户生效。

  1. 应用限制并重启服务
    修改完 /etc/security/limits.conf 文件后,你需要重启系统或至少重启受影响的服务(如openGauss数据库服务)来使更改生效。

  2. 检查并关闭不必要的应用程序
    确保没有不必要的应用程序或服务占用文件句柄。

  3. 优化数据库配置
    检查并优化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

image.png
到此问题找到了,进程实际限制的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

image.png
查看数据库日志,发现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=#

image.png
登录成功!
到这里,这个问题也就解决了。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值