linux内核参数分析,Linux 常用内核参数作用与常见问题处理

一、内核参数的查看和修改

查看内核参数

sysctl -a

4b76f4a6c5c3

临时修改内核参数

Linux系统启动后,所有的内核参数都保存在 /proc/sys 目录下, 只需要把要修改的数值写入对应的文件中就行了。

4b76f4a6c5c3

永久修改内核参数

直接修改 /etc/sysctl.conf 修改完成后 sysctl -p 或者重启服务器使配置生效

二、常见问题

Time wait bucket table overflow 报错

服务器 /var/log/message 日志如下,执行命令 ss -anp -o state time-wait|wc -l 统计处于 TIME_WAIT 状态的 TCP 连接数,发现处于 TIME_WAIT 状态的 TCP 连接非常多。

Feb 19 13:44:20 i-*** kernel: TCP: time wait bucket table overflow

Feb 19 13:44:24 i-*** kernel: printk: 432 messages suppressed.

Feb 19 13:44:34 i-*** kernel: TCP: time wait bucket table overflow

Feb 19 13:44:42 i-*** kernel: printk: 132 messages suppressed.

参数 net.ipv4.tcp_max_tw_buckets 可以调整内核管理中 TIME_WAIT 连接的数量,当服务器中处于 TIME_WAIT 连接的数量和需要转换为 TIME_WAIT 状态的连接数之和超过 net.ipv4.tcp_max_tw_buckets 的参数值时,服务器的日志中会出现以上错误

解决方法:调高改参数的值,或者在业务层面去改进TCP连接

服务器中 FIN_WAIT2 状态的 TCP 链接过多

原因分析:HTTP服务中,Server由于某种原因会主动关闭连接,列如keepalive超时的情况下。作为主动关闭连接的Server就会进入FIN_WAIT2状态;TCP/IP协议栈中存在连接半连接的概念,FIN_WAIT2状态不算超时,如果client不关闭,FIN_WAIT2将b保持到系统重启,越来越多的FIN_WAIT2会是内核出问题

解决方法:修改 /etc/sysctl.conf 文件,加入以下内容

net.ipv4.tcp_syncookies = 1 # 该参数表示是否打开 TCP 同步标签(SYN_COOKIES),内核必须开启并编译 CONFIG_SYN_COOKIES,SYN_COOKIES 可以防止一个套接字在有过多试图连接到达时引起过载。

#默认值 0 表示关闭,当该参数被设置为 1 且 SYN_RECV 队列满了之后,内核会对 SYN 包的回复做一定的修改。启用 net.ipv4.tcp_syncookies 后,会忽略 net.ipv4.tcp_max_syn_backlog

net.ipv4.tcp_fin_timeout = 30

net.ipv4.tcp_max_syn_backlog = 8192 # 该参数决定了系统中处于 SYN_RECV 状态的 TCP 连接数量。SYN_RECV 状态指的是当系统收到 SYN 后,作了 SYN+ACK 响应后等待对方回复三次握手阶段中的最后一个 ACK 的阶段

net.ipv4.tcp_max_tw_buckets = 5000

服务器中出现大量 CLOSE_WAIT 状态的 TCP 连接

原因分析:关闭TCP连接时,TCP连接的两端都可以发起关闭连接的请求,若对端发起了关闭连接,但本地没有关闭连接,那么连接就会处于CLOSE_WAIT状态。虽然该连接已经处于半开状态,但是已经无法和对端通信,需要及时释放掉该链接,可以从业务层判断某个连接是否已经被对端关闭。

其它常用内核参数

net.core.somaxconn:这个参数用于调节系统同时发起的TCP连接数,在高并发的请求中,默认的值可能会导致链接超时或重传。该参数指的是处于 ESTABLISHED 的数量上限。若服务器业务负载很高,则有必要调高该参数

net.ipv4.tcp_max_syn_backlog:指的是还在三次握手的半连接的上限

net.ipv4.tcp_fin_timeout:定义连接保持在FINFIN-WAIT-2状态的时间,默认60S

net.ipv4.tcp_tw_reuse:允许将TIME-WAIT 连接重新用于新的TCP连接,默认为0,1表示开启

net.ipv4.tcp_rw_recycle:为1时表示开启TCP连接中TIME-WAIT连接的快速回收

net.ipv4.tcp_syncookies:启用 SYN Cookies功能,当出现SYN队列溢出时,启用Cookie来处理,可以防范少量SYN攻击,默认开启

net.ipv4.tcp_keepalive_time:当keepalive开启时,TCP发送keepalive消息的频率,默认7200S,建议设置为600S

net.ipv4.ip_locall_port:允许系统打开的端口范围,即用于向外连接的端口范围

# 禁用整个系统所有接口的IPv6

net.ipv6.conf.all.disable_ipv6 = 1

# 禁用某一个指定接口的IPv6(例如:eth0, lo)

net.ipv6.conf.lo.disable_ipv6 = 1

net.ipv6.conf.eth0.disable_ipv6 = 1

三、禁用 CentOS 7 系统的 IPV6 接口

修改 /etc/default/grub 文件,把第六行修改为以下内容

GRUB_CMDLINE_LINUX="ipv6.disable=1 crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"

重新生成 grub.cfg 文件

grub2-mkconfig -o /boot/grub2/grub.cfg

重启系统查看 IPV6 接口是否被禁用

4b76f4a6c5c3

IPV6 接口已被禁用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值