高并发中的部分优化

1、关闭iptables 阻止内核加载iptables

2、系统对对用户打开文件数的软、硬限制
vim /etc/security/limits.conf
softe nofile 65535
hard nofile 65535

vim /etc/pam.d/login
sessionrequired /lib/security/pam_limits.so
#告诉linux在用户完成登录后,调用整个模块来设置系统对用户的可开文件数限制,这个模块会从limits.conf读取配置

cat /proc/sys/fs/file-max
#系统级的硬限制,所有 用户级的打开文件数不应该超过这个限制,修改方法
sed -i "s/fs.file-max=*/fs.file-max=131072/g" /etc/sysctl.conf

ulimit -n
#如果/etc/profile 这个用户登录脚本有限制,需要打开这个文件修改这个限制

3、内核tcp 参数优化
netstat -n|awk "/^tcp/{++s{$NF}END{for (i in s) print i,s[i]}"
针对time_wait 优化,调整/etc/systcl.conf
net.ipv4.tcp_syncookies= 1 #syn队列溢出时,启用cookies 防治少量syn
net.ipv4.tcp_tw_reuse= 1 #开启重用,timewait状态被重用于新tcp链接
net.ipv4.tcp_tw_recycle= 1 #timewait开启快速回收
net.ipv4.tcp_fin_timeout= 30 #修改timeout默认时间,应对fin_wait_2状态时对端出错无法关闭

针对大流量机器开启下面参数
net.ipv4.tcp_keepalive_time= 1200 #tcp发送keepalive消息频度,20分钟
net.ipv4.ip_local_port_range= 1024 65535 #提供对外连接的端口范围
net.ipv4.tcp_max_syn_backlog= 8192 #syn队列长度,默认是1024
net.ipv4.tcp_max_tw_buckets= 5000 #系统同时保持timewait的最大数量,若超量立刻被清楚
net.ipv4.tcp_max_syn_backlog= 65535 #发出syn后,记录尚未收到客户ack的请求的最大值
net.core.netdev_max_backlog= 32768 #网络接口收数据包的速度比内核处理速度快时,允许加入队列的最大数
net.core.somaxconn= 32768
net.core.wmen_default= 8388608
net.core.rmen_default= 8388608
net.core.rmen_max= 16777216 #最大socket读取buffer
net.core.wmen_max= 16777216 #最大socket写入buffer
net.ipv4.tcp_timestsmps= 0 #时间戳用来避免数据包序列号卷绕,关闭后内核接受 异常的数据包
net.ipv4.tcp_synack_retries= 2 #syn+ack(第二次握手)的重发次数,2次后内核放弃该链接
net.ipv4.tcp_syn_retries= 2 #重发syn的数量,2次后放弃该链接
net.ipv4.tcp_wmen= 8192 43660 873200 #tcp写buffer 依次是 无压力 有压力 tcp拒绝分配socket
net.ipv4.tcp_rmen= 32768 43660 873200 #tcp读buffer

4、io时间分配机制
tcp高并发时,非阻塞式同步io(epoll机制)或者一部io(AIO机制)

原文地址:https://www.cnblogs.com/plefan/p/13688394.html