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

查看指定参数

# sysctl kernel.sched_child_runs_firstkernel.sched_child_runs_first = 0

查看所有参数

# sysctl -a |moresysctl: reading key "net.ipv6.conf.all.stable_secret"sysctl: reading key "net.ipv6.conf.default.stable_secret"abi.vsyscall32 = 1crypto.fips_enabled = 0debug.exception-trace = 1debug.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_firstkernel.sched_child_runs_first = 1

修改含多个值的参数

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

持久化设置

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

# cat /etc/sysctl.confkernel.sched_child_runs_first=1

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

# sysctl -pkernel.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.confkernel.sched_child_runs_first=1

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

# sysctl -p /etc/sysctl.d/01-custom.confkernel.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