修改最大连接数

1、查看当前文件描述符的限制数目的命令:ulimit -n

2、修改文件描述符的限制数目

2.1 临时改变当前会话:

ulimit -n 65536

2.2 永久变更需要下面两个步骤:

1) 修改/etc/security/limits.conf 文件(不要忘记前面的*),如下:

vi /etc/security/limits.conf

*               soft    nofile           570000

*               hard    nofile           570000

root          soft    nofile           570000

root          hard    nofile           570000

保存退出后重新登录,其最大文件描述符已经被永久更改了;但是需要经过下面的步骤2)之后才能生效。

2) 重新加载库:

修改文件:vi /etc/pam.d/login

在最后加上:session    required /lib64/security/pam_limits.so即可

3.查看和修改系统的最大打开文件限制

查看:cat /proc/sys/fs/file-max

修改:通过vi修改 /etc/sysctl.conf 文件,在该文件中加上:fs.file-max=655350

可以在令针对此参数的修改一直生效,在该文件中,修改完后执行命令:sysctl –p使修改立即生效,而无需重启;

可使用下面两条命令验证一下修改是否成功:cat /proc/sys/fs/file-max或者ysctl fs.file-max

4.修改nr_open,通过vi修改 /etc/sysctl.conf,在该文件中加上:fs.nr_open = 2000000

可以在令针对此参数 的修改一直生效,在该文件中,修改完后执行命令:sysctl -p使修改立即生效,而无需重启;

注意:

a.    所有进程打开的文件描述符数不能超过/proc/sys/fs/file-max

b.    单个进程打开的文件描述符数不能超过user limit中nofile的soft limit

c.    nofile的soft limit不能超过其hard limit

d.    nofile的hard limit不能超过/proc/sys/fs/nr_open

修改端口限制

主要是对内核参数sysctl.conf的优化,/etc/sysctl.conf 是用来控制linux网络的配置文件,对于依赖网络的程序(如web服务器和cache服务器)非常重要,RHEL默认提供的最好调整。推荐配置(把下面内容添加进去):

#net.ipv4.tcp_max_tw_buckets = 6000#用来设定timewait的数量,默认是180 000,这里设为6000

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#内核接收缓冲区,第一个表示最小值,第二个表示默认值,第三个表示最大值,可在应用中设置SO_RCVBUF参数
net.ipv4.tcp_wmem = 4096 65536 16777216#内核发送缓冲区,第一个表示最小值,第二个表示默认值,第三个表示最大值,可在应用中设置SO_SNDBUF参数
net.ipv4.tcp_fin_timeout = 10#决定了套接字保持在FIN-WAIT-2状态的时间。默认值是60秒。正确设置这个值非常重要,有时即使一个负载很小的Web服务器,也会出现大量的死套接字而产生内存溢出的风险。FIN-WAIT-2的危险性比FIN-WAIT-1要小,因为它最多只能消耗1.5KB的内存,但是其生存期长些。如果发送端要求关闭套接字,net.ipv4.tcp_fin_timeout 决定了套接字保持在FIN-WAIT-2状态的时间。接收端可以出错并永远不关闭连接,甚至意外宕机
net.ipv4.tcp_tw_recycle = 1#用于设置启用timewait快速回收
#net.ipv4.tcp_tw_reuse = 1#用于设置开启重用,允许将TIME-WAIT sockets重新用于新的TCP连接
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 = 22144#默认值是128,这个参数用于调节系统同时发起的tcp连接数,在高并发的请求中,默认的值可能会导致链接超时或者重传,因此,需要结合并发请求数来调节此值
net.ipv4.tcp_syncookies = 0#用于设置开启SYN Cookies,当出现SYN等待队列溢出时,启用cookies进行处理
net.ipv4.tcp_max_orphans = 262144#用于设定系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,孤立连接将立即被复位并打印出警告信息。这个限制只是为了防止简单的DoS攻击。不能过分依靠这个限制甚至人为减小这个值,更多的情况下应该增加这个值
net.ipv4.tcp_max_syn_backlog = 262144#用于记录那些尚未收到客户端确认信息的连接请求的最大值。对于有128MB内存的系统而言,此参数的默认值是1024,对小内存的系统则是128
net.ipv4.tcp_synack_retries = 2#参数的值决定了内核放弃连接之前发送SYN+ACK包的数量
net.ipv4.tcp_syn_retries = 2#表示在内核放弃建立连接之前发送SYN包的数量
#net.ipv4.tcp_keepalive_time = 30#表示当keepalive启用的时候,TCP发送keepalive消息的频度。默认值是2(单位是小时)
vm.overcommit_memory = 1
fs.file-max = 2000000
fs.nr_open = 2000000

kernel.threads-max=16000

这个配置参考于cache服务器varnish的推荐配置和SunOne 服务器系统优化的推荐配置。这里有个对端口范围的限制如果不做修改原始的返回只有2.8万个port区间。

对上述内存参数的具体操作命令示例:

1)查看端口范围:

[root@slave2 sub_client]# sysctl -a | grep range

net.ipv4.ip_local_port_range = 1024 65000

2)修改内核参数sysctl.conf,修改文件:vi /etc/sysctl.conf

如果文件中有参数net.ipv4.ip_local_port_range的配置,则将其修改为:net.ipv4.ip_local_port_range = 1024 65000。否则,直接加上这句话。

3)让配置立即生效:sysctl -p

另外,端口范围参数net.ipv4.ip_local_port_range不要超过1024和65535,1024以下系统使用,65535以上设置会会提示失败:

error: "Invalid argument" setting key "net.ipv4.ip_local_port_range"

Logo

更多推荐