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