linux下设置最大文件打开数nofile及nr_open、file-max说明

在开发运维的时候我们常常会遇到类似“Socket/File: Can’t open so many files”,“无法打开更多进程”,或是coredump过大等问题,这些都可以设置资源限制来解决。今天在教某位客户设置最大文件数方法时,搜索网上的方法时发现各家说法并不一致,便写了这篇文档。

通常对linux某个用户设置系统资源,我们都已经知道可以用ulimit命令来查看和设置。

表 1. ulimit 参数说明

选项 [options] 含义 例子
-H 设置硬资源限制,一旦设置不能增加。 ulimit – Hs 64;限制硬资源,线程栈大小为 64K。
-S 设置软资源限制,设置后可以增加,但是不能超过硬资源设置。 ulimit – Sn 32;限制软资源,32 个文件描述符。
-a 显示当前所有的 limit 信息。 ulimit – a;显示当前所有的 limit 信息。
-c 最大的 core 文件的大小, 以 blocks 为单位。 ulimit – c unlimited; 对生成的 core 文件的大小不进行限制。
-d 进程最大的数据段的大小,以 Kbytes 为单位。 ulimit -d unlimited;对进程的数据段大小不进行限制。
-f 进程可以创建文件的最大值,以 blocks 为单位。 ulimit – f 2048;限制进程可以创建的最大文件大小为 2048 blocks。
-l 最大可加锁内存大小,以 Kbytes 为单位。 ulimit – l 32;限制最大可加锁内存大小为 32 Kbytes。
-m 最大内存大小,以 Kbytes 为单位。 ulimit – m unlimited;对最大内存不进行限制。
-n 可以打开最大文件描述符的数量。 ulimit – n 128;限制最大可以使用 128 个文件描述符。
-p 管道缓冲区的大小,以 Kbytes 为单位。 ulimit – p 512;限制管道缓冲区的大小为 512 Kbytes。
-s 线程栈大小,以 Kbytes 为单位。 ulimit – s 512;限制线程栈的大小为 512 Kbytes。
-t 最大的 CPU 占用时间,以秒为单位。 ulimit – t unlimited;对最大的 CPU 占用时间不进行限制。
-u 用户最大可用的进程数。 ulimit – u 64;限制用户最多可以使用 64 个进程。
-v 进程最大可用的虚拟内存,以 Kbytes 为单位。 ulimit – v 200000;限制最大可用的虚拟内存为 200000 Kbytes。

当然我们都知道linux大部分的命令设置都是临时生效,而且ulimit命令只对当前终端生效,如果需要永久生效的话,我们有两种方法,一种是将命令写至profile和bashrc中,还有一种就是在limits.conf中添加记录(需重启生效,并且在/etc/pam.d/中的seesion有使用到limit模块)。接下来讨论的就是在limits.conf用户最大文件打开数限制的相关内容。

针对用户打开最大文件数的限制, 在limits.conf对应的nofile,不管是man手册还是文件中说明都只是一句话“maximum number of open files",它其实对应是单个进程能打开的最大文件数,通常为了省事,我们想取消它的限制,根据man手册中,“values -1, unlimited or infinity indicating no limit”,-1、unlimited、infinity都是表明不做限制,可是当你实际给nofile设置成这个值,等你重启就会发现无法登录系统了。

由此可见,nofile是有一个上限的,同时用ulimit测试:

#ulimit -n unlimited

bash: ulimit: open files: cannot modify limit: 不允许的操作

写一个简单的for循环得出:

for  V in `seq  100000  10000000`;do ulimit -n $V;[[ $? != 0 ]]&&break;done

再执行ulimit -n ,可以看到1048576就是nofile的最大值了,但为什么是这个值?

1048576是1024*1024,当然这并没有什么卵用。。。再跟踪一下我们就会发现这个值其实是由内核参数定义的:

# cat /proc/sys/fs/nr_open

到此我们就要说起nr_open,与file-max了,网上在说到设置最大文件数时偶尔有些帖子也说到要修改file-max,字面上看file-max确实像是对应最大文件数,而在内核文档中它们两的解释是:

file-max:

The value in file-max denotes the maximum number of file-
handles that the Linux kernel will allocate. When you get lots
of error messages about running out of file handles, you might
want to increase this limit

执行:grep -r MemTotal /proc/meminfo | awk ‘{printf("%d",$2/10)}‘,可以看到与file-max是相近的;

nr_open

This denotes the maximum number of file-handles a process can
allocate. Default value is 1024*1024 (1048576) which should be
enough for most machines. Actual limit depends on RLIMIT_NOFILE
resource limit.
时间: 2024-12-29 23:22:24

linux下设置最大文件打开数nofile及nr_open、file-max说明的相关文章

Linux下设置Core文件生成路径及文件名

修改core dump文件路径: 方法1:临时修改: 修改/proc/sys/kernel/core_pattern文件/proc目录本身动态加载每次系统重启都会重新加载因此种方法只能作临时修改/proc/sys/kernel/core_pattern例:echo '/var/log/%e.core.%p' > /proc/sys/kernel/core_pattern 方法2:永久修改: 使用sysctl -w name=value命令例:/sbin/sysctl -w kernel.core

gcc在Linux下编译so文件出错 jni.h: no such file or directory

参考:https://stackoverflow.com/questions/13466777/jni-h-no-such-file-or-directory 例如: gcc TestNative.cpp -I"${JAVA_HOME}/include" -I"${JAVA_HOME}/include/linux" -fPIC -shared -o testnative.so

linux 调整最大文件打开数

vim /etc/security/limits.conf添加以下内容 *       soft    nofile  65535 *       hard    nofile  65535 并添加开机启动 vim /etc/rc.local ulimit -SHn 65535 附nginx进程下检查最大文件打开数脚本 #!/bin/bash for pid in `ps aux | grep nginx | grep -v grep |awk '{print $2}'` do cat /pro

ulimit命令用来限制系统用户对shell资源的访问(设置Linux文件打开数)

ulimit 用于限制 shell 启动进程所占用的资源,支持以下各种类型的限制:所创建的内核文件的大小.进程数据块的大小.Shell 进程创建文件的大小.内存锁住的大小.常驻内存集的大小.打开文件描述符的数量.分配堆栈的最大大小.CPU 时间.单个用户的最大线程数.Shell 进程所能使用的最大虚拟内存.同时,它支持硬资源和软资源的限制. 作为临时限制,ulimit 可以作用于通过使用其命令登录的 shell 会话,在会话终止时便结束限制,并不影响于其他 shell 会话.而对于长期的固定限制

Linux最大文件打开数使用经验详解

首先普及几个知识: Linux下一切都是文件,包括输入输出设备.网络连接.socket.管道等 与文件打开数最相关的是文件描述符(有的人喜欢称作文件标识符,英文为file descriptor),文件打开数的实质就是文件描述符的数量 文件打开数的多少取决于系统种类.内存大小,int(语言关键字,如C99的int)长度(非负整数),以及系统管理员的设定 最大文件打开数是针对一个进程而言,即一个进程能打开的文件句柄数目是有限的,不能超过最大文件打开数 ulimit命令只对当前shell有效,因此在编

解除linux最大进程数和最大文件打开数

说明: linux对于每个用户,系统限制其最大进程数.为提高性能,可以根据设备资源情况,可设置各      linux用户的最大进程数和每个进程可打开的文件数 1. 查看Linux的最大进程数和最大打开文件数 : ulimit -a 2. 修改Linux的最大进程数和最大文件打开数 打开vim /etc/security/limits.conf 添加如下内容即可 *       soft    nproc   65535 *       hard    nproc   65535 *      

解除 Linux 系统的最大进程数和最大文件打开数限制

ulimit用于shell启动进程所占用的资源 1.类别: shell内建命令 2.语法格式: ulimit [-acdfHlmnpsStvw] [size] 3.参数介绍: -H 设置硬件资源限制. -S 设置软件资源限制. -a 显示当前所有的资源限制. -c size:设置core文件的最大值.单位:blocks -d size:设置数据段的最大值.单位:kbytes -f size:设置创建文件的最大值.单位:blocks -l size:设置在内存中锁定进程的最大值.单位:kbytes

linux最大文件打开数和swap限制

linux最大文件打开数和swap限制   逑熙 关注 2017.07.24 15:39* 字数 388 阅读 314评论 0喜欢 0 linux 2.6+的核心会使用硬盘的一部分做为SWAP分区,用来进行进程调度--进程是正在运行的程序--把当前不用的进程调成‘等待(standby)‘,甚至‘睡眠(sleep)’,一旦要用,再调成‘活动(active)’,睡眠的进程就躺到SWAP分区睡大觉,把内存空出来让给‘活动’的进程. 如果内存够大,应当告诉 linux 不必太多的使用 SWAP 分区,

linux 修改文件打开数

vi /etc/security/limits.conf 在最后面加入: * soft nofile 65535 * hard nofile 65535 linux 修改文件打开数