当前位置: 首页 > 科技观察

如何在Linux服务器上设置Ulimit和文件描述符限制_0

时间:2023-03-14 15:33:53 科技观察

简介:在生产环境中,打开文件的数量等挑战现在司空见惯。因为许多应用程序都是基于Java和Apache的,所以安装和配置它们可能会导致打开太多文件(文件描述符)。如果打开文件描述符的数量超过默认设置的限制,您可能会面临访问控制问题并阻止打开文件的挑战。许多生产环境因此陷入停顿。幸运的是,在基于Linux的服务器上,有ulimit命令,您可以通过它查看、设置和获取文件打开状态和配置详细信息。该命令配备了多个选项,通过这些选项可以设置打开文件的数量。以下命令一一举例详细说明。查看任何Linux系统上的当前打开文件限制要获取Linux服务器上的打开文件限制,请执行以下命令,[root@ubuntu~]#cat/proc/sys/fs/file-max146013上面的数字表示A用户每个用户登录会话可以打开“146013”个文件。[root@centos~]#cat/proc/sys/fs/file-max149219[root@debian~]#cat/proc/sys/fs/file-max73906这清楚地表明每个Linux操作系统都有不同的打开文件数限制。这是基于在各自系统中运行的依赖项和应用程序。ulimit命令,顾名思义,ulimit(用户限制)用于显示和设置登录用户的资源限制。当我们运行带有-a选项的ulimit命令时,它将为登录用户打印所有资源限制。现在让我们在Ubuntu/Debian和CentOS系统上运行ulimit-a,Ubuntu/Debian系统shashi@Ubuntu~}$ulimit-acorefilesize(blocks,-c)0datasegsize(kbytes,-d)unlimitedschedulingpriority(-e)0filesize(blocks,-f)unlimitedpendingsignals(-i)5731maxlockedmemory(kbytes,-l)64maxmemorysize(kbytes,-m)unlimitedopenfiles(-n)1024pipesize(512bytes,-p)8POSIX消息队列(字节,-q)819200实时优先级(-r)0堆栈大小(千字节,-s)8192cpu时间(秒,-t)无限最大用户进程(-u)5731虚拟内存(千字节,-v)无限文件锁(-x)unlimitedCentOS系统shashi@centos~}$ulimit-acorefilesize(blocks,-c)0datasegsize(kbytes,-d)unlimitedschedulingpriority(-e)0filesize(blocks,-f)unlimitedpendingsignals(-i)5901maxlockedmemory(kbytes,-l)64maxmemorysize(kbytes,-m)unlimitedopenfiles(-n)1024pipesize(512bytes,-p)8POSIXmessagequeues(bytes,-q)819200实时优先级(-r)0堆栈大小(kbytes,-s)8192cpu时间(seconds,-t)unlimitedmaxuserprocesses(-u)5901virtualmemory(kbytes,-v)unlimitedfilelocks(-x)unlimitedaswe从这里可以看出,不同的操作系统有不同的限制设置,所有这些限制都可以使用ulimit命令配置/更改。要显示单个资源限制,可以在ulimit命令中传递特定参数,部分参数如下所示:ulimit-n–>显示打开文件限制ulimit-c–>显示核心转储文件大小umilit–u–>显示最大用户进程登录用户的限制ulimit-f–>显示用户可以拥有的最大文件大小umilit-m–>显示登录用户的最大内存大小ulimit-v–>显示登录用户的最大内存大小检查使用以下命令打开文件数量的硬限制和软限制:shashi@Ubuntu~}$ulimit-Hn1048576shashi@Ubuntu~}$ulimit-Sn1024如何修复达到最大文件数限制?假设我们的Linux服务器已达到打开文件数的最大限制,并希望在系统范围内扩展该限制,例如,我们希望将100000设置为打开文件数的限制。root@ubuntu~]#sysctl-wfs.file-max=100000fs.file-max=100000上面的修改会在下次重启前生效,所以要让这些修改在重启后仍然存在,请编辑文件/etc/sysctl.conf并添加相同的参数,root@ubuntu~]#vi/etc/sysctl.confs.file-max=100000保存文件并退出。运行下面的命令使上述更改立即生效,无需注销并重新启动。root@ubuntu~]#sysctl-p现在验证新更改是否生效。root@ubuntu~]#cat/proc/sys/fs/file-max100000使用以下命令找出当前正在使用的文件描述符的数量:[root@ansible~]#more/proc/sys/fs/file-nr12160100000注意:命令sysctl-p用于在不重新启动和注销的情况下提交更改。通过limit.conf文件设置用户级资源限制/etc/sysctl.conf文件用于设置系统范围的资源限制,但是如果要为特定用户设置资源限制,例如Oracle、MariaDB和Apache,您可以通过/etc/security/limits.conf文件设置资源限制来实现。示例limits.conf如下所示,root@ubuntu~]#cat/etc/security/limits.conf假设我们要为linuxtechi用户设置打开文件数的硬限制和软限制,设置hardoracle用户打开进程数限制和软限制,编辑文件/etc/security/limits.conf并添加以下行:#hardlimitformaxopenedfilesforlinuxtechiuserlinuxtechihardnofile4096#softlimitformaxopenedfilesforlinuxtechiuserlinuxtechisoftnofile1024#hardlimitformaxnumberofprocessfororacleuseroraclehardnproc8096#softlimitformaxprocessfororacleuseroraclesoftnproc4096保存文件并退出。注意:如果要限制资源给组而不是用户,也可以通过limits.conf文件输入@<组名>代替用户名,其余项相同。示例如下,#hardlimitformaxopenedfilesforsysadmingroup@sysadminhardnofile4096#softlimitformaxopenedfilesforsysadmingroup@sysadminsoftnofile1024验证新更改是否生效:~]#su-linuxtechi~]$ulimit-n-H4096~]$ulimit-n-S1024~]#su-oracle~]$ulimit-H-u8096~]$ulimit-S-u4096注意:另一个主要使用的命令是lsof,可以用于查找“当前打开了多少文件”,这个命令对管理员很有帮助。结论正如在介绍部分提到的,ulimit命令非常强大,可以帮助用户配置并确保应用程序安装更顺畅,没有任何瓶颈。此命令有助于修复基于Linux的服务器中(打开)大量文件的限制。