在做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