sysctl-查询修改Linux内核参数

     

         sysctl命令可以实时(runtime)查看和修改linux 内核参数。这个命令可以在大多数发行版本找到, 另外内核参数,也可以通过procfs 文件系统,在 /proc/sys/kernel下 进行查看和修改。

 

查看指定参数

# sysctl kernel.sched_child_runs_first
kernel.sched_child_runs_first = 0

 

查看所有参数

# sysctl -a |more
sysctl: reading key "net.ipv6.conf.all.stable_secret"
sysctl: reading key "net.ipv6.conf.default.stable_secret"
abi.vsyscall32 = 1
crypto.fips_enabled = 0
debug.exception-trace = 1
debug.kprobes-optimization = 1

 

 

修改指定参数

# sysctl -w kernel.sched_child_runs_first=1 
kernel.sched_child_runs_first = 1

注意等号前后不能有空格

修改含多个值的参数

# sysctl -w net.ipv4.ip_local_port_range="1025 60999"
net.ipv4.ip_local_port_range = 1025 60999

 

通过修改procfs 文件系统实现

 

修改指定参数

# echo 1 > /proc/sys/kernel/sched_child_runs_first
# sysctl kernel.sched_child_runs_first
kernel.sched_child_runs_first = 1

 

修改含多个值的参数

# echo "32768    60999" > /proc/sys/net/ipv4/ip_local_port_range
# sysctl net.ipv4.ip_local_port_range
net.ipv4.ip_local_port_range = 32768 60999

 

持久化设置

以上修改是临时性的,机器重启后失效,如果要持久化保存,可修改/etc/sysctl.conf 

# cat /etc/sysctl.conf
kernel.sched_child_runs_first=1

修改完毕后,使用以下命令使得参数立即生效

# sysctl -p
kernel.sched_child_runs_first = 1

机器重启后该设置仍然有效。

 

Cenos/RHEL7 下的设置

 

Cenos/RHEL7版本与之前版本略有不通, 需要在/etc/sysctl.d目录下创建一个文件, 由于验证使用的虚拟机使用Cenos7可以看到,上面修改的/etc/sysctl.conf文件, 在 /etc/sysctl.d下有个叫99-sysctl.conf 的文件链接指向了他。

lrwxrwxrwx. 1 root root 14 Dec 16 2018 99-sysctl.conf -> ../sysctl.conf

下面是/etc/sysctl.conf中的说明

# cat /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).

       参考以上说明,可以在/etc/sysctl.d下自定义一个文件, 由于文件是按照顺序执行的, 文件名前面增加个序号, 比如/etc/sysctl.d/01-custom.conf:(验证前可以先手工清除之前/etc/sysctl.conf中的配置)

#cat /etc/sysctl.d/01-custom.conf
kernel.sched_child_runs_first=1

重启后生效,如果要立即生效可以执行以下命令

# sysctl -p /etc/sysctl.d/01-custom.conf
kernel.sched_child_runs_first = 1

 

参考:

sysctl(8) – Linux manual page – man7.org

How to query and modify kernel parameters using sysctl (Immediately and persistently) in CentOS / RHEL

 

Be First to Comment

发表回复