/proc虚拟文件系统与系统内核参数修改方法
/proc 虚拟文件系统用作查看和配置系统内核参数的接口。/proc 是一个层次结构的目录其中包含了
系统内核的当前设置值。之所以称为/proc 是因为该虚拟文件系统通常发送信息给别的操作系统进程。
虚拟文件系统不会实际的存在于磁盘中。/proc 虚拟文件在内存中动态的根据内核参数创建。使用
man proc 可以查看到很多与 /proc 虚拟文件系统相关的信息。可以使用 cat,less,more,view,grep
等命令查看/proc 虚拟文件。有些/proc 文件的查看需要 root 权限。
常用的/proc虚拟文件
/proc/cpuinfo CPU与系统架构信息。
/proc/meminfo 空闲的与已经分配使用的物理内存,虚拟内存信息。
/proc/net 存放网络信息的目录。
/proc/mounts 所有已挂载的文件系统。
/proc/diskstats 每一个磁盘的I/O 统计信息。
/proc/devices PCI 设备。
/proc/filesystems 编译进内核的文件系统。
/proc/sys 存放与系统内核相关变量的目录。其中的一些变量可以通过sysctl 设置。
/proc/cmdline 在启动的时候传递给内核的参数。
/proc/version 操作系统版本信息。
查看CPU 的详细信息:
[oracle@zeng ~]$ less /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 23
model name : Pentium(R) Dual-Core CPU T4400 @ 2.20GHz
stepping : 10
cpu MHz : 0.000
cache size : 6144 KB
fdiv_bug : no
第一块CPU编号为0,依此类推。在安装oracle数据库的时候需要查看该信息。以确定CPU是否满足
安装oracle数据库软件的先决条件。
查看物理内存,虚拟内存信息:
[oracle@zeng ~]$ grep MemTotal /proc/meminfo
MemTotal: 911564 kB
[oracle@zeng ~]$ grep SwapTotal /proc/meminfo
SwapTotal: 3481592 kB
在安装oracle 数据库软件的时候需要查看理内存,虚拟内存信息。以确定是否满足oracle 文档
中给出的内存需求。我们不仅关系物理内存,虚拟内存的总量,还关系他们的使用情况。
[oracle@zeng ~]$ free
total used free shared buffers cached
Mem: 911564 273168 638396 0 84548 73424
-/+ buffers/cache: 115196 796368
Swap: 3481592 0 3481592
free 命令列出当前系统中物理内存,虚拟内存的分配情况。如果发现物理内存不足可以选择添加
添加内存条,或者把不重要的进程结束掉,释放内存。虚拟内存不足可以为系统添加一个swap file
增加虚拟内存的容量。
查看内核参数:
[oracle@zeng ~]$ grep . /proc/sys/kernel/*
/proc/sys/kernel/acct:4 2 30
/proc/sys/kernel/acpi_video_flags:0
/proc/sys/kernel/auto_msgmni:1
/proc/sys/kernel/blk_iopoll:1
/proc/sys/kernel/bootloader_type:113
/proc/sys/kernel/bootloader_version:1
grep: /proc/sys/kernel/cad_pid: Permission denied
/proc/sys/kernel/core_pattern:|/usr/libexec/abrt-hook-ccpp /var/spool/abrt %p %s %u %c
/proc/sys/kernel/core_pipe_limit:4
/proc/sys/kernel/core_uses_pid:1
/proc/sys/kernel/ctrl-alt-del:0
/proc/sys/kernel/domainname:(none)
/proc/sys/kernel/exec-shield:1
/proc/sys/kernel/ftrace_dump_on_oops:0
/proc/sys/kernel/hostname:zeng
使用grep 命令打印出/proc/sys/kernel 目录下文件中的所有的信息。也可以使用grep 只查看
某个参数的值。
在安装oracle 数据库软件的时候你需要先查看下系统的内核设置参数,然后再决定应该怎么修改。
另外一种查看与修改内核参数的方式是使用sysctl 使用程序。
查看所有的内核参数,在查看内核参数的时候与输出重定向联系起来使用是一个好主意,可以把
输出的信息保存为文本,慢慢的查看。
[oracle@zeng ~]$ sysctl -a | less
error: permission denied on key 'kernel.cad_pid'
kernel.sched_child_runs_first = 0
kernel.sched_min_granularity_ns = 1000000
kernel.sched_latency_ns = 5000000
kernel.sched_wakeup_granularity_ns = 1000000
kernel.sched_shares_ratelimit = 250000
-a 显示当前所有系统变量的值。
使用sysctl修改内核参数:
查看下原来的内核参数(sem 信号量)。
[root@zeng ~]# grep . /proc/sys/kernel/*| grep sem
/proc/sys/kernel/sem:250 32000 100 128
修改semd的值,这些值以数组的形式给出。注:内核参数不要无理由的随便改变,这里仅为测试。
[root@zeng ~]# sysctl -w kernel.sem="250 32000 100 300"
kernel.sem = 250 32000 100 300
-w 指定修改某个内核参数值。(该参数设置临时有效,重启以后就无效了。)
确定修改以后的值
[root@zeng ~]# grep . /proc/sys/kernel/*| grep sem
/proc/sys/kernel/sem:250 32000 100 300
通过/etc/sysctl.conf 文件来修该内核参数:
文件中的第一句话表明了该文件的用途。并把kernel.sem的值修改为下面的样式。退出并保存。
root@zeng ~]# vi /etc/sysctl.conf
# Kernel sysctl configuration file for Oracle Linux
kernel.sem = 250 32000 100 400
然后使用sysctl -p 命令使/etc/sysctl.conf 中的条目实例化成当前的内核参数值。
[root@zeng ~]# sysctl -p
确定修改后的情况:
[root@zeng ~]# grep . /proc/sys/kernel/*| grep sem
grep: /proc/sys/kernel/keys: Invalid argument
/proc/sys/kernel/sem:250 32000 100 400
注:建议在修改 /etc/sysctl.conf 文件前进行备份。以方便将来审计那些参数发生了变化,并
方便反转。
使用echo 修改内核参数:
现在把内核参数修改回未修改前的值。
[root@zeng ~]# echo 250 32000 100 128 > /proc/sys/kernel/sem
确定命令的执行结果
[root@zeng ~]# grep . /proc/sys/kernel/*| grep sem
/proc/sys/kernel/sem:250 32000 100 128
该参数只是临时有效,如果需要永久生效,应该把要修改的内核参数写进/etc/sysctl.conf
把要修改的参数写进/etc/sysctl.conf ,执行sysctl -p 让系统重新读取该文件,把修改的
值设置为当前值。
[root@zeng ~]# echo "kernel.sem =250 32000 100 128" >> /etc/sysctl.conf
[root@zeng ~]# sysctl -p
注意是 >>而不是>,如果是>会把原来/etc/sysctl.conf 中的内容覆盖掉。>>在文件的末尾添加
一行。所有建议在修改/etc/sysctl.conf 前进行备份。
确定修后的结果.
[root@zeng ~]# tail -5 /etc/sysctl.conf
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
kernel.sem =250 32000 100 128
如果 /etc/sysctl.conf 中存在两个kernel.sem 条目,后面的那个条目才有效。因为在启动的时候
/etc/sysctl.conf 中的参数是从上到下处理的。
使用cat修改内核参数:
[root@zeng ~]# cat >> /etc/sysctl.conf <
> kernel.sem = 250 32000 100 200
> EOF
[root@zeng ~]# tail -5 /etc/sysctl.conf
net.core.wmem_max = 1048586
kernel.sem =250 32000 100 128
kernel.sem = 250 32000 100 200
只有kernel.sem = 250 32000 100 200 会生效,前一个sem 值不会生效。
小结:可以运行sysctl -w 来临时修改内核参数,如果想让内核参数永久更改应该通过编辑
/etc/sysctl.conf 文件或者使用echo,cat 添加条目,并执行sysctl -p 实现。另外不要
无理由的修改内核参数,否则可能导致系统不稳定,甚至宕机。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26110315/viewspace-718305/,如需转载,请注明出处,否则将追究法律责任。