当前位置:   article > 正文

linux -- sysctl详解1

linux -- sysctl详解1

一、简介

1、什么是内核参数(kernel parameters at runtime)

内核参数是可在系统运行时调整的可调整参数。不需要重启或重新编译内核就可以使更改生效。可以通过以下方法处理内核参数:

  • sysctl 命令
  • 挂载于 /proc/sys/ 目录的虚拟文件系统
  • /etc/sysctl.d/ 目录中的配置文件
  • /etc/sysctl.conf 文件等
    Tunables 被内核子系统划分为不同的类,Red Hat Enterprise Linux 有以下可调整类:
可调整类(Tunable class)子系统 (Subsystem)
abi执行域和个人
crypto加密接口
debug内核调试接口
fs全局和特定文件系统的 tunables
kernel全局内核 tunables
net网络 tunables
sunrpcSun 远程过程调用 (NFS)
user用户命名空间限制
vm调整和管理内存、缓冲和缓存

1、sysctl涉及的系统配置文件

/run/sysctl.d/*.conf
/etc/sysctl.d/*.conf
/usr/local/lib/sysctl.d/*.conf
/usr/lib/sysctl.d/*.conf
/lib/sysctl.d/*.conf
/etc/sysctl.conf
/proc/sys
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2、sysctl -a 会打印出所有的配置

3、 sysctl --system 会打印出如下配置文件中的配置项

/run/sysctl.d/*.conf
/etc/sysctl.d/*.conf
/usr/local/lib/sysctl.d/*.conf
/usr/lib/sysctl.d/*.conf
/lib/sysctl.d/*.conf
/etc/sysctl.conf
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
[root@yyzc-zjjcs04 ~]# sysctl --system
* Applying /usr/lib/sysctl.d/00-system.conf ...
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
* Applying /usr/lib/sysctl.d/50-default.conf ...
kernel.sysrq = 16
kernel.core_uses_pid = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.promote_secondaries = 1
net.ipv4.conf.all.promote_secondaries = 1
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
* Applying /usr/lib/sysctl.d/60-libvirtd.conf ...
fs.aio-max-nr = 1048576
* Applying /etc/sysctl.d/99-sysctl.conf ...
kernel.sem = 1350 32000 300 1024
* Applying /etc/sysctl.conf ...
kernel.sem = 1350 32000 300 1024
[root@yyzc-zjjcs04 ~]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

二、如何修改内核参数

1、临时修改内核参数1

sysctl <TUNABLE_CLASS>.<PARAMETER>=<TARGET_VALUE>

root@k8s-master:~# sysctl  net.ipv4.tcp_syn_retries=3
net.ipv4.tcp_syn_retries = 3
root@k8s-master:~# sysctl  net.ipv4.tcp_syn_retries
net.ipv4.tcp_syn_retries = 3
root@k8s-master:~# cat /proc/sys/net/ipv4/tcp_syn_retries
3
root@k8s-master:~#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

注意: 值与等号之间无空格,否则会失败

root@k8s-master:~# sysctl  net.ipv4.tcp_syn_retries= 3
sysctl: setting key "net.ipv4.tcp_syn_retries": Invalid argument
sysctl: cannot stat /proc/sys/3: No such file or directory
root@k8s-master:~#
  • 1
  • 2
  • 3
  • 4

上面的示例命令在系统运行时更改了参数值。更改将立即生效,无需重新启动。但是在系统重启后,所在的改变会返回到默认状态。

以下方式也是临时更改,重启后失效

 sysctl -w <TUNABLE_CLASS>.<PARAMETER>=<TARGET_VALUE> 
  • 1

上述命令还会更改/proc/sys 目录中对应类的文件中的值,示例如下

root@k8s-master:/proc/sys/net/ipv4# cat tcp_syn_retries
4
root@k8s-master:/proc/sys/net/ipv4# sysctl net.ipv4.tcp_syn_retries
net.ipv4.tcp_syn_retries = 4
root@k8s-master:/proc/sys/net/ipv4# sysctl -w  net.ipv4.tcp_syn_retries=5
net.ipv4.tcp_syn_retries = 5
root@k8s-master:/proc/sys/net/ipv4# sysctl net.ipv4.tcp_syn_retries
net.ipv4.tcp_syn_retries = 5
root@k8s-master:/proc/sys/net/ipv4# cat tcp_syn_retries
5
root@k8s-master:/proc/sys/net/ipv4#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2、临时修改内核参数2

echo <TARGET_VALUE> > /proc/sys/<TUNABLE_CLASS>/<PARAMETER>
  • 1

为内核参数分配一个目标值,但是这些更改将在系统重启后消失。

root@k8s-master:/proc/sys/net/ipv4# sysctl  net.ipv4.tcp_syn_retries
net.ipv4.tcp_syn_retries = 6
root@k8s-master:/proc/sys/net/ipv4# cat tcp_syn_retries
6
root@k8s-master:/proc/sys/net/ipv4# echo 3 >tcp_syn_retries
root@k8s-master:/proc/sys/net/ipv4# cat tcp_syn_retries
3
root@k8s-master:/proc/sys/net/ipv4# sysctl  net.ipv4.tcp_syn_retries
net.ipv4.tcp_syn_retries = 3
root@k8s-master:/proc/sys/net/ipv4#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

3、永久修改内核参数方法1

 sysctl -w <TUNABLE_CLASS>.<PARAMETER>=<TARGET_VALUE> >> /etc/sysctl.conf
  • 1

示例命令会更改内核参数,并将其写入 /etc/sysctl.conf 文件,该文件会覆盖内核参数的默认值。更改会立即并永久生效,无需重启。

上述命令还会更改/proc/sys 目录中对应类的文件中的值

4、永久修改内核参数方法2

在 /etc/sysctl.d/ 中创建一个新配置文件或者直接在 /etc/sysctl.conf文件中修改;

vim /etc/sysctl.d/<some_file.conf>
  • 1

在文件中配置内核参数,一行一个。

<TUNABLE_CLASS>.<PARAMETER>=<TARGET_VALUE>
<TUNABLE_CLASS>.<PARAMETER>=<TARGET_VALUE>
  • 1
  • 2

保存配置文件。重启机器以使更改生效。或者,要在不重启的情况下应用更改,请输入:

sysctl -p /etc/sysctl.d/<some_file.conf>
  • 1
root@k8s-master:/proc/sys/net/ipv4# sysctl  -p /etc/sysctl.conf
net.ipv4.tcp_syn_retries = 3
net.ipv4.tcp_synack_retries = 6
root@k8s-master:/proc/sys/net/ipv4
  • 1
  • 2
  • 3
  • 4

该命令允许您从之前创建的配置文件中读取值,并将这些值加载到内核中去。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/307694
推荐阅读
相关标签
  

闽ICP备14008679号