调整内核参数


尽管不推荐用户修改和重编译内核代码,但还是有另外调整内核参数的手段。proc文件系统提供了观察和修改运行中的内核的接口。

要观察当前内核配置,找到/proc/sys/目录中某个内核参数文件,使用cat查看内容。在下图中,我们修改系统的内存过量策略。输出0表示系统在对应用程序分配内存前先检查可用内存量。我们通过echo命令为该参数提供一个新值,修改内核的这个默认操作,在这里,把0修改为1,1表示内核直接分配内存,不去检查是否有充足的内存可以分配。

在proc文件系统中修改内核参数

从上面的演示中可以看到,使用echo和cat可以很方便修改内核参数,几乎在所有带/proc文件系统的操作系统上都可以使用,但是有两个明显的问题。

  • echo命令不能检查参数的一致性。

  • 在重启系统之后,所有的内核修改都会丢失。

为了解决上面的问题,管理员应该使用sysctl来修改内核参数。

提示:默认,系统提供了必要模块,让你使用sysctl而不用重启系统。如果你在安装系统的时候去掉这项功能,你就必须重启Linux使得sysctl的修改生效。

另外,RHEL和SUSE提供图形界面修改sysctl参数。如下图

红帽内核调整界面

在基于SUSE的系统,YaST的powerteak优化工具可以用来调优内核参数。

powertweak工具

使用powertweak的好处是,所有调优参数都有简短的说明。所有使用powertweak做出的修改都会存在/etc/powertweak/tweaks文件中。

内核参数存储路径

内核参数存储在/proc(一般来说是/proc/sys)目录下。

通过/proc目录树下的文件,可以简单的了解与内核、进程、内存、网络以及其它组件相关的参数配置。每一个进程在/proc目录下都有一个以它的PID命令的目录。下表是部分文件所包含内核信息说明。

文件/目录 作用
/proc/sys/abi/* 用于提供对外部二进制的支持,比如在类UNIX系统,SCO UnixWare 7、SCO OpenServer和SUN Solaris 2上编译的软件。默认情况下是安装的,也可以在安装过程中移除。
/proc/sys/fs/* 设置系统允许的打开文件数和配额等。
/proc/sys/kernel/* 可以启用热插拔、操作共享内存、设置最大的PID文件数和syslog中的debug级别。
/proc/sys/net/* 优化网络,IPV4和IPV6
/proc/sys/vm/* 管理缓存和缓冲

使用sysctl命令

sysctl使用/proc/sys目录树中的文件名作为参数。例如,shmmax内核参数保存在/proc/sys/kernel/shmmax中,你可以使用cat来读取、echo来修改:

  1. #cat /proc/sys/kernel/shmmax
  2. 33554432
  3. #echo 33554430 > /proc/sys/kernel/shmmax
  4. #cat /proc/sys/kernel/shmmax
  5. 33554430

然而,使用echo很容易弄错,所以我们推荐使用sysctl命令,因为它会修改前检查数据一致性,如下:

  1. #sysctl kernel.shmmax
  2. kernel.shmmax = 33554432
  3. #sysctl -w kernel.shmmax=33554430
  4. kernel.shmmax = 33554430
  5. #sysctl kernel.shmmax
  6. kernel.shmmax = 33554430

上面的修改会在下次重启之后消失。如果你想做永久修改,你应该编辑/etc/sysctl.conf文件,添加参数如下:

  1. kernel.shmmax = 33554439

下次重启系统的时候会读取/etc/sysctl.conf文件,你也可以通过如下的命令,不用重启就让配置生效:

  1. # sysctl -p

原文: https://lihz1990.gitbooks.io/transoflptg/content/04.系统调优/4.3.调整内核参数.html