首页 > 其他分享 >openGauss报错:Too many open files,解决方案

openGauss报错:Too many open files,解决方案

时间:2024-08-30 16:53:10浏览次数:6  
标签:files many unlimited bytes 报错 user file Max openGauss

操作系统信息

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
登录成功!
到这里,这个问题也就解决了。

标签:files,many,unlimited,bytes,报错,user,file,Max,openGauss
From: https://blog.csdn.net/u010490822/article/details/141684863

相关文章

  • .NET 8 Moq mock GetRequiredKeyedService Setup报错b9
    .NET8MoqmockGetRequiredKeyedServiceSetup报错项目代码里有地方用到IServiceProvider.GetRequiredKeyedService来解析服务,在写单元测试时需要Mock它,本以为像下面这样写就可以了:||varserviceProvider=newMock<IServiceProvider>();||---|---|||serviceP......
  • vs2022引用了dll,本地启动调试的时候报错
     问题描述:引用了公司类库之后,使用vs2012以及vs2015进行编译调试都没有问题,放站点下也正常运行;但是用vs2022编译之后,启动调试报错,但是放站点上正常运行;报错:“检索COM类工厂中CLSID为{33DBD6AC-03F5-4CCD-9711-FFBA69267E41}的组件失败,原因是出现以下错误:80040154没......
  • 使用Opatch命令报错:Java (1.7) could not be located. OPatch cannot proceed!
    问题描述[oracle@servernamedb]$OPatch/opatchversionOPatch/opatch:line839:[:toomanyargumentsOPatch/opatch:line839:[:toomanyargumentsJava(1.7)couldnotbelocated.OPatchcannotproceed!OPatchreturnswitherrorcode=1解决方案删除OPatch目录......
  • .NET 8 Moq mock GetRequiredKeyedService Setup报错
    .NET8MoqmockGetRequiredKeyedServiceSetup报错项目代码里有地方用到IServiceProvider.GetRequiredKeyedService<T>来解析服务,在写单元测试时需要Mock它,本以为像下面这样写就可以了:varserviceProvider=newMock<IServiceProvider>();serviceProvider.Setup(x=>x.GetR......
  • Spring security的SecurityConfig配置时 userDetailsService报错如何解决?
    文章目录报错信息原因解决方案1.实现`UserDetailsService`接口修改`IUsersService`接口和实现类2.修改`SecurityConfig`3.其他注意事项报错信息‘userDetailsService(T)’in‘org.springframework.security.config.annotation.authentication.builders......
  • Vue的那些报错
    【Vue-cli】npminstall时报错:npmERRCouldnotresolvedependencynpmERRpeernpmERR!codeERESOLVEnpmERR!ERESOLVEunabletoresolvedependencytreenpmERR!npmERR!Whileresolving:[email protected]!Found:[email protected]!node_modules/es......
  • 【GaussDB】应用报错 socket is not closed; Urgent packet sent to backend successf
    数据库原理差异在Oracle中连接会话默认永不超时,Mysql中连接会话默认8小时超时,而在GaussDB中,默认30min超时问题排查确认探活是否生效方式一:查询审计日志,可以看到会话退出方式为超时退出:selecttime,type,result,client_conninfo,detail_infofrompg_query_audit('2023-06-06......
  • IDEA报错:Error running 'XXXApplication' Error running XXXXApplication. Command li
     IDEA启动SpringBoot项目报错Errorrunning'XXXApplication'ErrorrunningXXXXApplication.Commandlineistoolong.ShortenthecommandlineviaJARmanifestorviaaclasspathfileandrerun   点击在高版本IDEA下只需要点击就会自动选择  低版本......
  • pbootcms网站常见报错(错误提示)集合
    1.后台图片上传提示:”上传失败:存储目录创建失败!“给静态资源目录(根目录下的static文件夹)增加权限,一般755或者777权限,推荐755权限设置。2.网站打开提示:”未检测到您服务器环境的sqlite3数据库扩展...“按照提示信息操作,检查php.ini中是否已经开启sqlite3扩展。详细介绍->pbootcm......
  • 第44天:WEB攻防-PHP应用&SQL盲注&布尔回显&延时判断&报错处理&增删改查方式
    #PHP-MYSQL-SQL操作-增删改查1、功能:数据查询查询:SELECT*FROMnewswhereid=$id2、功能:新增用户,添加新闻等增加:INSERTINTOnews(字段名)VALUES(数据)3、功能:删除用户,删除新闻等删除:DELETEFROMnewsWHEREid=$id4、功能:修改用户,修改文章等修改:UPDATEnewsSETid=......