Linux 系统内核优化

Linux操作系统内核优化
告诉Linux在用户完成系统登录后,应该调用pam_limits.so模块来设置系统对该用户可使用的各种资源数量的最大限制
vim /etc/pam.d/login
session required /lib/security/pam_limits.so

–允许程序监听在一个非本地IP上,而不报错
echo “net.ipv4.ip_nonlocal_bind=1” >>/etc/sysctl.conf

–允许通过本机转发数据
echo “net.ipv4.ip_forward=1” >> /etc/sysctl.conf

–虚拟内存配置
echo “vm.max_map_count=655360” >> /etc/sysctl.conf

共享内存段的最大数量,缺省值4096
kernel.shmmni = 4096

定义单个共享内存段的最大值,建议值为多于物理内存的一半,可取的最大值为物理内存值-1byte,这样SGA肯定会包含在单个共享内存段中
kernel.shmmax = 34359738366

共享内存的总页数,共享内存页大小为4KB
kernel.shmall = 8388608

一个信号量集合中能够包含的信号量最大数目 系统内可允许的信号量最大数目 一个信号量集合上可以执行的操作数量 系统信号量集合总数
kernel.sem = 256 32000 100 142

限制并发未完成的请求,应该设置避免I/O子系统故障
fs.aio-max-nr = 1048576

允许的文件句柄最大数目,即系统中可以打开的最大文件数量
fs.file-max = 6815744

应用程序可使用的IPv4端口范围
net.ipv4.ip_local_port_range = 9000 65500

默认socket读缓冲区大小
net.core.rmem_default = 262144

最大socket读缓冲区大小
net.core.rmem_max = 4194304

默认socket写缓冲区大小
net.core.wmem_default = 262144

最大socket写缓冲区大小
net.core.wmem_max = 1048586

关闭ipv6地址
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

过多请求时,及时将TIME_WAIT状态的端口清理掉,否则会严重的影响到后继的新连接,防御小流量程度的DoS、CC和SYN攻击
netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’
net.ipv4.tcp_syncookies= 1 #表示开启SYNCookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse= 1 #表示开启重用。允许将TIME-WAITsockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle= 1 #表示开启TCP连接中TIME-WAITsockets的快速回收,默认为0,表示关闭;
net.ipv4.tcp_fin_timeout= 30 #当服务器主动关闭链接时,选项决定了套接字保持在FIN-WAIT-2状态的时间。默认值是60秒

连接数很高,流量负载很大的服务器建议设置
net.ipv4.tcp_keepalive_time= 1200 #表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
net.ipv4.ip_local_port_range= 1024 65535 #表示用于向外连接的端口范围。缺省情况下很小,改为1024到65535。
net.ipv4.tcp_max_syn_backlog= 8192 #表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_tw_buckets= 5000 #表示系统同时保持TIME_WAIT的最大数量,如果超过这个数字,TIME_WAIT将立刻被清除并打印警告信息。默认为180000,改为5000。此项参数可以控制TIME_WAIT的最大数量,只要超出了

net.ipv4.tcp_max_orphans= 3276800 #系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上,如果超过这个数字,连接将即刻被复位并打印出警告信息,这个限制仅仅是为了
防止简单的DoS攻击,不能过分依靠它或者人为地减小这个值,更应该增加这个值(如果增加了内存之后)

定义了TCP发送缓存(用于TCP发送滑动窗口)的最小值,默认值,最大值,可参考的优化值:8192 436600 873200
net.ipv4.tcp_wmem= 8192 436600 873200

定义了TCP接受缓存(用于TCP接收滑动窗口)的最小值,默认值,最大值,可参考的优化值:32768 436600 873200
net.ipv4.tcp_rmem = 32768 436600 873200
net.ipv4.tcp_mem= 94500000 91500000 92700000

net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_sack = 1

参数的值决定了内核放弃连接之前发送SYN+ACK包的数量
net.ipv4.tcp_synack_retries = 2

表示在内核放弃建立连接之前发送SYN包的数量
net.ipv4.tcp_syn_retries = 1

这个参数表示TCP三次握手建立阶段接受SYN请求列队的最大长度,默认1024,将其设置的大一些可以使出现Nginx繁忙来不及accept新连接的情况时,Linux不至于丢失客户端发起的链接请求
net.ipv4.tcp_max_syn_backlog = 262144

时间戳可以避免序列号的卷绕。一个1Gbps的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种“异常”的数据包。这里需要将其关掉#开启时间戳,配合tcp复用。如遇到局域网内的其他机器由于时间戳不同导致无法连接服务器,有可能是这个参数导致。注:阿里的slb会清理掉tcp_timestamps
net.ipv4.tcp_timestamps = 1

参数的值决定了内核放弃连接之前发送SYN+ACK包的数量
net.ipv4.tcp_synack_retries = 2

表示在内核放弃建立连接之前发送SYN包的数量
net.ipv4.tcp_syn_retries = 1

每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
net.core.netdev_max_backlog= 32768

例如web应用中listen函数的backlog默认会给我们内核参数的net.core.somaxconn限制到128,而nginx定义的NGX_LISTEN_BACKLOG默认为511,所以有必要调整这个值
net.core.somaxconn= 32768

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值