linnux之修改最大连接数(文件句柄数)
查看用户最大连接数
[root@passportmem1 ~]# ulimit -n
1024
1024是指当前用户的进程最多允许同时打开1024个文件,是默认值,其实真正的数量是小于1024的,因为还得去掉每个进程的标准输入,标准输出,标准错误,服务器监听socket,进程间通讯的unix域socket等文件,这样剩下的可用文件数大概会在1014左右。也就是说当前用户的最大打开文件数为1014个,最大支持1014个并发连接。
对于想支持更高数量的TCP并发连接的web程序,并且有时会遇到打开文件数达到上限时的错误“Too many open files"或者Socket/File: Can’t open so many files等,就必须修改Linux对当前用户的进程同时打开的文件数量的软限制(soft limit)和硬限制(hard limit)。
软限制(soft limit),是指Linux在当前系统能够承受的范围内进一步限制用户同时打开的文件数;
硬限制(hard limit),则是根据系统硬件资源状况(主要是系统内存)计算出来的系统最多可同时打开的文件数量。通常软限制小于或等于硬限制。
修改最大连接数
1、通过ulimit修改
[root@passportmem1 ~]# ulimit -n 65535
[root@passportmem1 ~]# ulimit -n
65535
修改后,对当前登录生效,如果想要长期生效,可以添加到用户登录的环境变量配置文件中/etc/profile。
[root@passportmem1 ~]#echo 'ulimit -SHn 65535' >>source /etc/profile
[root@passportmem1 ~]#source /etc/profile
注意:如果修改失败,则需要查看配置文件/etc/security/limits.conf,也是另一种修改方法。
2、通过/etc/security/limits.conf修改
添加下面2行:
root soft nofile 65535
root hard nofile 65535
root代表的是要修改root用户的打开文件数限制,如果想为其他用户设置,则可写其他用户的名字,想为所有用户设置,可以写 " * "
修改/etc/pam.d/login文件,在文件中添加如下行,让用户登陆后,告诉系统应该调用pam_limits.so模块来完成设置系统对该用户可使用的各种资源数量的限制
session required /lib/security/pam_limits.so
修改以后,需要重新登录才能生效。
另外,Linux系统级的最大打开文件数,根据系统资源情况,也有限制。
系统级最大文件数限制
[root@localhost ~]# cat /proc/sys/fs/file-max
793015
表明此系统最多允许同时打开(所有用户打开文件数总和)793015个文件,是Linux系统级硬限制,所有用户级的打开文件数限制都不应超过这个数值。通常这个系统级硬限制是Linux系统在启动时根据系统硬件资源状况计算出来的最佳的最大同时打开文件数限制,一般这个值为系统内存的10%,可以自shell中这样计算。
[root@localhost ~]#grep -r MemTotal /proc/meminfo | awk '{printf("%d",$2/10)}'
如果没有特殊需要,不建议修改此值。
如果想为用户级打开文件数限制设置超过此限制的值。修改此硬限制的方法是修改/etc/rc.local脚本,在脚本中添加如下行:
[root@localhost ~]#echo 1024000 > /proc/sys/fs/file-max
或者修改/etc/sysctl.conf,增加
fs.file-max = 1024000
并使用sysctl -p,使之生效。
这样可以让Linux在启动完成后强行将系统级打开文件数硬限制设置为1024000。
还有一个文件可以查看当前系统的打开文件数:
[root@localhost ~]# cat /proc/sys/fs/file-nr
1024 0 793015
三个值分别表示:
分配文件句柄的数目 已使用文件句柄的数目 文件句柄的最大数目