Linux内核参数的配置方法

/proc是一个伪文件系统,可以像访问普通文件系统一样访问系统内部的数据结构,获取当前运行的进程、统计和硬件等各种信息。例如可以使用cat /proc/cpuinfo获取CPU信息。

/proc/sys/下的文件和子目录比较特别,它们对应的是系统内核参数,更改文件内容就意味着修改了相应的内核参数,可以简单的使用echo命令来完成修改:

1
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

上面这个命令启用了TCP SYN Cookie保护。使用echo修改内核参数很方便,但是系统重启后这些修改都会消失,而且不方便配置参数的集中管理。/sbin/sysctl命令就是用来查看和修改内核参数的工具。sysctl -a会列出所有内核参数当前的配置信息,比遍历目录/proc/sys/方便多了。sysctl -w修改单个参数的配置,例如:

1
sysctl -w net.ipv4.tcp_syncookies=1

和上面echo命令的效果一样。需要注意的是,要把目录分隔符斜杠/替换为点.,并省略proc.sys部分。

通过sysctl -w修改,还是没有解决重启后修改失效的问题。更常用的方式是,把需要修改的配置集中放在/etc/sysctl.conf文件中,使用sysctl -p重新加载配置使其生效。在系统启动阶段,init程序会运行/etc/rc.d/rc.sysinit脚本,其中包含了执行sysctl命令,并使用了/etc/sysctl.conf中的配置信息。因此放在/etc/sysctl.conf中的系统参数设置在重启后也同样生效,同时也便于集中管理修改过了哪些内核参数。

最后,哪里有比较完整的内核参数说明文档?我觉得kernel.org的文档比较全。例如我们常会遇到的网络内核参数,net.corenet.ipv4 。TCP相关的参数,也可以通过man文档了解。

comments powered by Disqus