/proc虛擬檔案系統與系統核心引數修改方法

pingley發表於2012-03-12
/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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章