sysctl 动态修改 Linux 内核参数命令

发布时间: 更新时间: 总字数:1133 阅读时间:3m 作者: IP上海 分享 网址

sysctl 动态修改内核的参数。修改后的参数支持在/proc/sys/目录下查看,包含一些TCP/IP堆栈和虚拟内存系统的高级选项。

介绍

  • 通过配置合理的 sysctl 参数可提高系统的性能
  • sysctl 命令既可以读又可以写系统参数

sysctl 命令

sysctl (选项) (参数)

例子:

sysctl [-n] [-e] variable …
sysctl [-n] [-e] [-q] -w variable=value …
sysctl [-n] [-e] [-q] -p [filename]
sysctl [-n] [-e] -a
sysctl [-n] [-e] -A

选项:
-n:打印值时不打印关键字;
-e:忽略未知关键字错误;
-N:仅打印名称;
-w:当改变sysctl设置时使用此项;
-p:从配置文件“/etc/sysctl.conf”加载内核参数设置;
-a:打印当前所有可用的内核参数变量和值;
-A:以表格方式打印当前所有可用的内核参数变量和值。

参数:

  • 变量=值:设置内核参数对应的值。注意等号两端不能有空格。

使用

查看系统变量

sysctl  -a  // 显示当前所有可用的内核参数
sysctl  kernel.hostname  // 读特定的内核参数,比如kernel.hostname
sysctl  -a | grep hostname  // 显示名称中带有“hostname”关键字的内核参数

修改系统变量

sysctl  -w  kernel.hostname=abc  // 把hostname改为abc

简略一点:

sysctl  kernel.hostname=abc  // 把hostname改为abc

从配置文件加载内核参数

sysctl  -p  // 从配置文件sysctl.conf中加载内核参数

修改系统变量有两种方式,一种是上述修改系统变量中的命令行方式,另一种是修改sysctl.conf文件。sysctl.conf文件一般在系统的/etc目录下。在最后一行输入如下语句:

kernel.hostname=abc

然后需要执行sysctl -p指令更新修改的内核参数配置文件,使其生效。

tcp_syn_retries

net.ipv4.tcp_syn_retries 表示建立 TCP 连接时,SYN 报文重试的次数,默认为 6链接超时时间(connect timeout)127s(=2^0 + 2^1 + 2^2 + 2^3 + 2^4 + 2^5 + 2^6)

$ sysctl -a | grep tcp_syn_retries
net.ipv4.tcp_syn_retries = 6

F&Q

Linux SYNs包异常丢弃导致网络时断时续排查

使用 netstat 命令,查看网卡 syn/passive 的统计情况

[root@x ~]# netstat -s | grep -i syn
    1523045 invalid SYN cookies received
    46862 resets received for embryonic SYN_RECV sockets
    1962353 SYNs to LISTEN sockets dropped
    TCPSYNChallenge: 1874
    TCPSynRetrans: 687620
    TCPACKSkippedSynRecv: 18169
[root@x ~]# netstat -s | grep -i overflow
[root@x ~]#
[root@x ~]# netstat -s | grep -i passive
    80469203 passive connection openings
    1962935 passive connections rejected because of time stamp

SYNs to LISTEN sockets droppedpassive connections rejected because of time stamp 相差不大

  • 原因分析:WAF(或其他) NAT 时,tcp连接采用客户端时间,不符合的将被丢弃导致,当时间快的连接访问时,其他正常时间的连接将被丢弃,表现为不会 SYN 包

    • PAWS(Protect Againest Wrapped Sequence numbers) 目的是解决在高带宽下,TCP序列号在一次会话中可能被重复使用而带来的问题,使用 timestamp 验证被丢弃的数据包统计
    • passive connections rejected because of time stamp 表示因 timestamp 验证失败而拒绝的连接数统计
    • packets rejects in established connections because of timestamp 表示已有连接中拒绝的包数量统计
  • 解决方式:

/proc/sys/net/ipv4/tcp_tw_recycle 修改为 0,drop情况就不发生

  • net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中 TIME-WAIT sockets 的快速回收,默认为0,表示关闭
  • 修改方法如下

临时配置:

echo 0 > /proc/sys/net/ipv4/tcp_tw_recycle

永久配置:

$ vim /etc/sysctl.conf

net.ipv4.tcp_tw_recycle = 0

生效

sysctl -p

failed to create fsnotify watcher: too many open files

超过了系统默认的 fs.inotify.max_user_instances=128,调整如下

  • 临时设置
sudo sysctl fs.inotify.max_user_instances=8192
  • 永久保存
echo fs.inotify.max_user_instances=8192| tee -a /etc/sysctl.conf && sudo sysctl -p
Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数