1.最大文件打开数限制
查看前用户进程打开的文件数限制,命令行执行:
ulimit -n
默认1024.
这表示当前用户的每个进程最多允许同时打开1024个文件,这1024个文件中还得除去每个进程必然打开的标准输入,标准输出,标准错误,服务器监听 socket,进程间通讯的unix域socket等文件,那么剩下的可用于客户端socket连接的文件数就只有大概1024-10=1014个左右。也就是说缺省情况下,基于Linux的通讯程序最多允许同时1014个TCP并发连接。
对于想支持更高数量的TCP并发连接的通讯处理程序,就必须修改Linux对当前用户的进程同时打开的文件数量的软限制(soft limit)和硬限制(hardlimit)。其中软限制是指Linux在当前系统能够承受的范围内进一步限制用户同时打开的文件数;硬限制则是根据系统硬件资源状况(主要是系统内存)计算出来的系统最多可同时打开的文件数量。通常软限制小于或等于硬限制。
vim /etc/security/limits.conf
limits.conf添加如下配置:
# 修改文件数
* soft nofile 10240
* hard nofile 10240
# 修改进程数
* soft noproc 60000
* hard noproc 60000
可用’*'号表示修改所有用户的限制;如果只针对某用户,可指定了要修改哪个用户的打开文件数限制,即:user1 soft nofile 10240;soft或hard指定要修改软限制还是硬限制;10240则指定了想要修改的新的限制值,即最大打开文件数(请注意软限制值要小于或等于硬限制)。
vim /etc/pam.d/login
添加:
session required /lib/security/pam_limits.so
这是告诉Linux在用户完成系统登录后,应该调用pam_limits.so模块来设置系统对该用户可使用的各种资源数量的最大限制(包括用户可打开的最大文件数限制),而pam_limits.so模块就会从/etc/security/limits.conf文件中读取配置来设置这些限制值。
2.修改profile
vim /etc/profile
profile文件添加:
ulimit -SHn 64000
命令行执行生效:
source /etc/profile
3.内核参数sysctl.conf的优化
/etc/sysctl.conf 是用来控制linux网络的配置文件,对于依赖网络的程序(如web服务器和cache服务器)非常重要.
先备份原配置:
cp /etc/sysctl.conf /etc/sysctl.conf.bak
然后编辑sysctl.conf:
vim /etc/sysctl.conf
添加:
net.ipv4.ip_local_port_range = 1024 65535
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_window_scaling = 0
net.ipv4.tcp_sack = 0
net.core.netdev_max_backlog = 30000
net.ipv4.tcp_no_metrics_save = 1
net.core.somaxconn = 10240
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
其中:
net.ipv4.ip_local_port_range = 1024 65535
如果按上述端口范围进行设置,则理论上单独一个进程最多可以同时建立60000多个TCP客户端连接。
net.ipv4.ip_conntrack_max = 20000
如果按上述参数进行设置,则理论上单独一个进程最多可以同时建立20000多个TCP客户端连接。
选一个设置即可。
修改完毕后,执行下面命令,使配置立即生效,或者重启:
sysctl -p /etc/sysctl.conf #或者sysctl -p
sysctl -w net.ipv4.route.flush=1