蚊章汇 - 文件句柄
type: channel
link: https://linuxcn.bwsl.wang/tag/%E6%96%87%E4%BB%B6%E5%8F%A5%E6%9F%84/
items: 如何在 Linux 服务器上设置 ulimit 和文件描述符数限制

如何在 Linux 服务器上设置 ulimit 和文件描述符数限制
type: item
date: 2019-07-09T20:14:33+08:00
description: 简介：在生产环境中遇到打开文件数这类的挑战如今已是司空见惯的事情了。因为许多应用程序是基于 Java 和 Apache 的，安装和配置它们可能会导致打开过多的文件（文件描述符）。如果打开的文件描述符超过了默认设置的限制，就可能会面临访问控制问题，受阻于打开文件的挑战。许多生产环境因此而陷入停滞状态。幸运的是，在基于 Linux 的服务器上，都有 ulimit 命令，通过它可以查看、设置、获取文件打开的状态和配置详情。此命令配备了许多选项，通过这些组合可以设置打开文件的数量。下面逐个命令用示例做了详细说明。查看任何 Linux 系统中当前打开文件数的限制要在 Linux 服务器上得到打开文件数的限制，请执行以下命令，[root@ubuntu ~]# cat /proc/sys/fs/file-max 146013上面的数字表明用户可以在每个用户登录会话中打开 ‘146013’ 个文件。[root@centos ~]# cat /proc/sys/fs/file-max 149219 [root@debian ~]# cat /proc/sys/fs/file-max 73906这清楚地表明，各个 Linux 操作系统具有不同的打开文件数限制。这基于各自系统中运行的依赖关系和应用程序。ulimit 命令顾名思义，ulimit（用户限制）用于显示和设置登录用户的资源限制。当我们使用 -a 选项运行 ulimit 命令时，它将打印登录用户的所有资源限制。现在让我们在 Ubuntu/Debian 和 CentOS 系统上运行 ulimit -a，Ubuntu / Debian 系统shashi@Ubuntu ~}$ ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 5731 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 5731 virtual memory (kbytes, -v) unlimited file locks (-x) unlimitedCentOS 系统shashi@centos ~}$ ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 5901 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 5901 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited正如我们可以在这里看到的，不同的操作系统具有不同的限制设置。所有这些限制都可以使用 ulimit 命令进行配置/更改。要显示单个资源限制，可以在 ulimit 命令中传递特定的参数，下面列出了一些参数：ulimit -n –> 显示打开文件数限制ulimit -c –> 显示核心转储文件大小umilit -u –> 显示登录用户的最大用户进程数限制ulimit -f –> 显示用户可以拥有的最大文件大小umilit -m –> 显示登录用户的最大内存大小ulimit -v –> 显示最大内存…