在做linux服务器程序的时候,当流量上来,linux服务器的默认单进程的文件打开数肯定是不够的,一般非root用户进程默认只有1024个文件打开权限,所有对文件的操作,对网络的操作,在linux下都作为一个文件打开,所以在并发量大的时候,这个限制很快就达到了。一旦达到这个限制,应用程序就会报一个:too many open files的错误。解决这个问题就需要增大这个限制,下面是我在网上找到的,而且也已经应用在实际服务器的运维上:
linux默认下open files 是1024,首先看下系统现有的设置
[root@lpmaster ~]# ulimit -a
core file size (blocks, -c) 0 ##设定core文件的最大值
data seg size (kbytes, -d) unlimited ##程序数据节区的最大值
scheduling priority (-e) 0 ##
file size (blocks, -f) unlimited ##shell所能建立的最大文件
pending signals (-i) 71680
max locked memory (kbytes, -l) 32 ##设置在内存中锁定进程的最大值.
max memory size (kbytes, -m) unlimited ##设置可以使用的常驻内存的最大值.
open files (-n) 1024 ##设置内核可以同时打开的文件描述符的最大值.单位:n
pipe size (512 bytes, -p) 8 ##设置管道缓冲区的最大值
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240 ##设置堆栈的最大值.单位:kbytes
cpu time (seconds, -t) unlimited ##设置CPU使用时间的最大上限.单位:seconds
max user processes (-u) 71680 ##用户最多可开启的程序数目。
virtual memory (kbytes, -v) unlimited ##指定可使用的虚拟内存上限,单位为KB。
file locks (-x) unlimited
参数介绍:
-H 设置硬件资源限制.
-S 设置软件资源限制.
-a 显示当前所有的资源限制.
-c size:设置core文件的最大值.单位:blocks
-d size:设置数据段的最大值.单位:kbytes
-f size:设置创建文件的最大值.单位:blocks
-l size:设置在内存中锁定进程的最大值.单位:kbytes
-m size:设置可以使用的常驻内存的最大值.单位:kbytes
-n size:设置内核可以同时打开的文件描述符的最大值.单位:n
-p size:设置管道缓冲区的最大值.单位:kbytes
-s size:设置堆栈的最大值.单位:kbytes
-t size:设置CPU使用时间的最大上限.单位:seconds
-v size:设置虚拟内存的最大值.单位:kbytes
当看到open files 是1024,针对我的应用 是完全不够用的,现在进行修改
[root@lpmaster ~]# ulimit -n 65535 ##设置 open files 打开的文件数65535
[root@lpmaster ~]# ulimit -n #查看现在系统open files
65535
或者用另一种方法修改
vim 打开 /etc/security/limits.conf,增加:
* soft nofile 65535
* hard nofile 65535
这行设置了每个用户的默认打开文件数为2048。注意"nofile"项有两个可能的限制措施。就是项下的hard和soft。要使修改过得最大打开文件数生效,必须对这两种限制进行设定。 如果使用"-"字符设定, 则hard和soft设定会同时被设定。
硬限制表明soft限制中所能设定的最大值。 soft限制指的是当前系统生效的设置值。 hard限制值可以被普通用户降低。但是不能增加。 soft限制不能设置的比hard限制更高。 只有root用户才能够增加hard限制值。
在对open files 修改最大值是,也可以检查/proc/sys/fs/file-max文件来确认系统最大打开文件数的限制,另外还有一个,/proc/sys/fs/file-nr只读,可以看到整个系统目前使用的文件句柄数量
也可以一般在启动应用的时候先执行ulimit -HSn 65535,省得每个应用启动都要执行ulimit -HSn 65535
转载于:https://blog.51cto.com/crazyming/856819