sysctl與/proc詳解

目錄

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)、雅安服務(wù)器托管、營(yíng)銷軟件、網(wǎng)站建設(shè)、渭南網(wǎng)站維護(hù)、網(wǎng)站推廣。

一、sysctl簡(jiǎn)介

二、sysctl命令使用

三、sysctl配置文件/etc/sysctl.conf詳解

四、/proc目錄簡(jiǎn)介

五、/proc/sys下內(nèi)核文件與配置文件sysctl.conf中變量的對(duì)應(yīng)關(guān)系

一、sysctl簡(jiǎn)介

     sysctl 是一個(gè)用來(lái)在系統(tǒng)運(yùn)作中查看及調(diào)整系統(tǒng)參數(shù)的工具。有的sysctl參數(shù)只是用來(lái)查看目前的系統(tǒng)狀況,例如查看目前已開(kāi)機(jī)時(shí)間、所使用的操作系統(tǒng)版本、核心名稱等等;而有的可以讓我們修改參數(shù)以調(diào)整系統(tǒng)運(yùn)作的行為,例如網(wǎng)絡(luò)暫存內(nèi)存的大小、最大的上線人數(shù)等等。

/etc/sysctl.conf就是sysctl的配置文件,而這些可以調(diào)整的參數(shù)中必須在一開(kāi)機(jī)系統(tǒng)執(zhí)行其它程序前就設(shè)定好,有的可以在開(kāi)機(jī)完后任意調(diào)整。同大多數(shù)配置文件一樣,我們可以對(duì)sysctl.conf進(jìn)行配置來(lái)優(yōu)化系統(tǒng)的性能.

二、sysctl命令使用

[root@www ~]# sysctl --help
usage:  sysctl [-n] [-e] variable ... 
        sysctl [-n] [-e] [-q] -w variable=value ... 
        sysctl [-n] [-e] -a 
        sysctl [-n] [-e] [-q] -p <file>   (default /etc/sysctl.conf) 
        sysctl [-n] [-e] -A

常用參數(shù):

    -w   臨時(shí)改變某個(gè)指定參數(shù)的值,如

          sysctl -w net.ipv4.ip_forward=1

    -a   顯示所有的系統(tǒng)參數(shù)

    -p   從指定的文件加載系統(tǒng)參數(shù),如不指定即從/etc/sysctl.conf中加載

三、sysctl配置文件/etc/sysctl.conf

[root@ElementServer ~]# cat /etc/sysctl.conf|grep -v '^#\|^$'
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
kernel.msgmnb = 5368760912
kernel.msgmax = 16777216
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
kernel.shmmni = 8192
fs.file-max = 6553560

解釋一下sysctl.conf文件中參數(shù)的意義:

  • net.ipv4.ip_forward = 0:

  •     出于安全考慮,Linux系統(tǒng)默認(rèn)是禁止數(shù)據(jù)包轉(zhuǎn)發(fā)的。所謂轉(zhuǎn)發(fā)即當(dāng)主機(jī)擁有多于一塊的網(wǎng)卡時(shí),其中一塊收到數(shù)據(jù)包,根據(jù)數(shù)據(jù)包的目的ip地址將包發(fā)往本機(jī)另一網(wǎng)卡,該網(wǎng)卡根據(jù)路由表繼續(xù)發(fā)送數(shù)據(jù)包。這通常就是路由器所要實(shí)現(xiàn)的功能。

    配置Linux系統(tǒng)的ip轉(zhuǎn)發(fā)功能,首先保證硬件連通,然后打開(kāi)系統(tǒng)的轉(zhuǎn)發(fā)功能

  • less /proc/sys/net/ipv4/ip_forward,該文件內(nèi)容為0,表示禁止數(shù)據(jù)包轉(zhuǎn)發(fā),1表示允許,將其修改為1。可使用命令echo "1" > /proc/sys/net/ipv4/ip_forward 修改文件內(nèi)容,重啟網(wǎng)絡(luò)服務(wù)或主機(jī)后效果不再。若要其自動(dòng)執(zhí)行,可在/etc/sysctl.conf中net.ipv4.ip_forward = 1

  • 捉著命令echo "1" > /proc/sys/net/ipv4/ip_forward 寫入腳本/etc/rc.d/rc.local

  • 或者 在/etc/sysconfig/network腳本中添加 FORWARD_IPV4="YES"

  • kernel.shmmax:

  • 是核心參數(shù)中最重要的參數(shù)之一,用于定義單個(gè)共享內(nèi)存段的最大值。設(shè)置應(yīng)該足夠大,能在一個(gè)共享內(nèi)存段下容納下整個(gè)的SGA ,設(shè)置的過(guò)低可能會(huì)導(dǎo)致需要?jiǎng)?chuàng)建多個(gè)共享內(nèi)存段,這樣可能導(dǎo)致系統(tǒng)性能的下降。至于導(dǎo)致系統(tǒng)下降的主要原因?yàn)樵趯?shí)例啟動(dòng)以及ServerProcess創(chuàng)建的時(shí)候,多個(gè)小的共享內(nèi)存段可能會(huì)導(dǎo)致當(dāng)時(shí)輕微的系統(tǒng)性能的降低(在啟動(dòng)的時(shí)候需要去創(chuàng)建多個(gè)虛擬地址段,在進(jìn)程創(chuàng)建的時(shí)候要讓進(jìn)程對(duì)多個(gè)段進(jìn)行“識(shí)別”,會(huì)有一些影響),但是其他時(shí)候都不會(huì)有影響。

  • 官方建議值:

  • 32位linux系統(tǒng):可取最大值為4GB(4294967296bytes)-1byte,即4294967295。建議值為多于內(nèi)存的一半,所以如果是32為系統(tǒng),一般可取值為4294967295。32位系統(tǒng)對(duì)SGA大小有限制,所以SGA肯定可以包含在單個(gè)共享內(nèi)存段中。

  • 64位linux系統(tǒng):可取的最大值為物理內(nèi)存值-1byte,建議值為多于物理內(nèi)存的一半,一般取值大于SGA_MAX_SIZE即可,可以取物理內(nèi)存-1byte。例如,如果為12GB物理內(nèi)存,可取12*1024*1024*1024-1=12884901887,SGA肯定會(huì)包含在單個(gè)共享內(nèi)存段中。 

  • kernel.shmall:

  •     該參數(shù)控制可以使用的共享內(nèi)存的總頁(yè)數(shù)。Linux共享內(nèi)存頁(yè)大小為4KB,共享內(nèi)存段的大小都是共享內(nèi)存頁(yè)大小的整數(shù)倍。一個(gè)共享內(nèi)存段的最大大小是16G,那么需要共享內(nèi)存頁(yè)數(shù)是16GB/4KB=16777216KB /4KB=4194304(頁(yè)),也就是64Bit系統(tǒng)下16GB物理內(nèi)存,設(shè)置kernel.shmall = 4194304才符合要求(幾乎是原來(lái)設(shè)置2097152的兩倍)。這時(shí)可以將shmmax參數(shù)調(diào)整到16G了,同時(shí)可以修改SGA_MAX_SIZE和SGA_TARGET為12G(您想設(shè)置的SGA最大大小,當(dāng)然也可以是2G~14G等,還要協(xié)調(diào)PGA參數(shù)及OS等其他內(nèi)存使用,不能設(shè)置太滿,比如16G)

  • kernel.shmmni:

  • 該參數(shù)是共享內(nèi)存段的最大數(shù)量。shmmni缺省值4096,一般肯定是夠用了。

  • fs.file-max:

  • 該參數(shù)決定了系統(tǒng)中所允許的文件句柄最大數(shù)目,文件句柄設(shè)置代表linux系統(tǒng)中可以打開(kāi)的文件的數(shù)量。

  • fs.aio-max-nr:

  •       此參數(shù)限制并發(fā)未完成的請(qǐng)求,應(yīng)該設(shè)置避免I/O子系統(tǒng)故障。

  •    推薦值是:1048576 其實(shí)它等于 1024*1024 也就是 1024K 個(gè)。

  • kernel.sem:

  • 以kernel.sem = 250 32000 100 128為例:

  •        250是參數(shù)semmsl的值,表示一個(gè)信號(hào)量集合中能夠包含的信號(hào)量最大數(shù)目。

  •        32000是參數(shù)semmns的值,表示系統(tǒng)內(nèi)可允許的信號(hào)量最大數(shù)目。

  •        100是參數(shù)semopm的值,表示單個(gè)semopm()調(diào)用在一個(gè)信號(hào)量集合上可以執(zhí)行的操作數(shù)量。

  •        128是參數(shù)semmni的值,表示系統(tǒng)信號(hào)量集合總數(shù)。

  • net.ipv4.ip_local_port_range:

  •     表示應(yīng)用程序可使用的IPv4端口范圍。

  • net.core.rmem_default:

  • 表示套接字接收緩沖區(qū)大小的缺省值。

  • net.core.rmem_max:

  • 表示套接字接收緩沖區(qū)大小的最大值。

  • net.core.wmem_default:

  • 表示套接字發(fā)送緩沖區(qū)大小的缺省值。

  • net.core.wmem_max:

  • 表示套接字發(fā)送緩沖區(qū)大小的最大值

四、/proc目錄簡(jiǎn)介

       大家都知道進(jìn)程都 是在內(nèi)存中,而內(nèi)存中的數(shù)據(jù)都寫入到了/proc/目錄中的文件中去了,所以很有必要分析這個(gè)文件夾內(nèi)的內(nèi)容。由于系統(tǒng)的信息,如進(jìn)程,是動(dòng)態(tài)改變的,所以用戶或應(yīng)用程序讀取proc文件時(shí),proc文件系統(tǒng)是動(dòng)態(tài)從系統(tǒng)內(nèi)核讀出所需信息并提交的。

1、proc文件系統(tǒng)總覽 
       在類Unix系統(tǒng)中體現(xiàn)了一種良好的抽象哲學(xué),就是幾乎所有的數(shù)據(jù)實(shí)體都被抽象成一個(gè)統(tǒng)一的接口--文件來(lái)看待,這樣我們就可以用一些簡(jiǎn)單的基本工具完成大量復(fù)雜的操作。

在Linux中存在著一類特殊的偽文件系統(tǒng),用于使用與文件接口統(tǒng)一的操作來(lái)完成各種功能,例如ptyfs、devfs、sysfs和procfs。而procfs就是其中應(yīng)用最廣泛的一種偽文件系統(tǒng)。 
      procfs是Linux內(nèi)核信息的抽象文件接口,大量?jī)?nèi)核中的信息以及可調(diào)參數(shù)都被作為常規(guī)文件映射到一個(gè)目錄樹(shù)中,這樣我們就可以簡(jiǎn)單直接的通過(guò)echo或cat這樣的文件操作命令對(duì)系統(tǒng)信息進(jìn)行查取和調(diào)整了。同時(shí)procfs也提供了一個(gè)接口,使得我們自己的內(nèi)核模塊或用戶態(tài)程序可以通過(guò)procfs進(jìn)行參數(shù)的傳遞。在當(dāng)今的Linux系統(tǒng)中,大量的系統(tǒng)工具也通過(guò)procfs獲取內(nèi)核參數(shù),例如ps、lspci等等,沒(méi)有procfs它們將可能不能正常工作。 
procfs的使用如同常規(guī)的文件系統(tǒng)一樣,例如加載一個(gè)procfs (首先確定你的內(nèi)核已經(jīng)支持procfs默認(rèn)如此): 
# mount -t proc none /proc 
也可以在/etc/fstab中加入如下一行使系統(tǒng)在啟動(dòng)時(shí)自動(dòng)加載procfs(大多數(shù)系統(tǒng)中也是默認(rèn)如此): 
none /proc proc defaults 0 0 
在proc文件系統(tǒng)中,主要包含三大類內(nèi)容,進(jìn)程相關(guān)部分,系統(tǒng)信息部分,以及系統(tǒng)子系統(tǒng)部分。

在下面我們可以看到一個(gè)典型的procfs布局: 

[root@www ~]# ls /proc
1     1230  147  2198   283  41   750        cpuinfo      ipmi        misc          slabinfo       vmstat
10    1238  148  22     284  42   8          crypto       irq         modules       softirqs       zoneinfo
1007  1249  15   2265   29   5    8958       devices      kallsyms    mounts        stat
1037  1262  156  22958  293  586  9          diskstats    kcore       mpt           swaps
1046  1264  157  22966  3    6    9271       dma          keys        mtd           sys
1047  1266  158  23     30   7    935        driver       key-users   mtrr          sysrq-trigger
1076  1268  16   23062  31   705  951        execdomains  kmsg        net           sysvipc
1091  1271  17   23215  32   706  acpi       fb           kpagecount  pagetypeinfo  timer_list
11    1273  18   24     33   707  asound     filesystems  kpageflags  partitions    timer_stats
1110  1274  19   25     369  708  buddyinfo  fs           loadavg     sched_debug   tty
1198  1275  2    26     38   709  bus        interrupts   locks       schedstat     uptime
12    13    20   27     39   710  cgroups    iomem        mdstat      scsi          version
1222  14    21   28     4    72   cmdline    ioports      meminfo     self          vmallocinfo

在上面中我們可以看到procfs包含的內(nèi)容: 
* 進(jìn)程相關(guān)部分 (只讀) 
      這部分文件都是以數(shù)字為名的子目錄,這個(gè)數(shù)字就是相關(guān)進(jìn)程的進(jìn)程ID,在后面中會(huì)詳細(xì)介紹進(jìn)程相關(guān)子目錄的結(jié)構(gòu)和信息。 
需要注意的是procfs中進(jìn)程子系統(tǒng)部分的一個(gè)特殊點(diǎn),就是/proc/self,它是指向當(dāng)前執(zhí)行進(jìn)程的符號(hào)連接,或者說(shuō)--是指向未來(lái)你將要執(zhí)行指令的心靈感應(yīng): 
> cat self/cmdline 
catself/cmdline 
在這個(gè)命令中,我們希望它顯示當(dāng)前進(jìn)程的cmdline參數(shù),它恰恰就顯示了當(dāng)前進(jìn)程--我們所執(zhí)行的這條命令,cat self/cmdline。幸好這條指令顯示出的信息會(huì)忽略空格,導(dǎo)致顯示略微的不正常,否則我們倒是可以很容易的使用`cat self/cmdline`這樣的命令制造出永遠(yuǎn)循環(huán)執(zhí)行的進(jìn)程來(lái)。;> 
* 內(nèi)核信息部分 (只讀) 
       這部分文件同樣處于/proc的頂層目錄,不過(guò)它們大部分都是常規(guī)、只讀的文本文件,可以直接用cat查看信息。作為系統(tǒng)內(nèi)核執(zhí)行體的抽象,我們也可以把它看作內(nèi)核"進(jìn)程"的信息部分,當(dāng)然雖然并不存在這個(gè)進(jìn)程實(shí)體。這里比較特別的一個(gè)文件是 /proc/cmdline : 
>cat cmdline 
ro root=/dev/hda2 
在這個(gè)文件中存放的是系統(tǒng)內(nèi)核引導(dǎo)時(shí)的命令行參數(shù)。
* 內(nèi)核各子系統(tǒng)相關(guān)部分 (部分可調(diào)) 
      這部分是系統(tǒng)內(nèi)核參數(shù)調(diào)整的重頭戲,在procfs中,除去上面所述的兩部分內(nèi)容外,還有很大一部分信息文件被存放在了一些并非以數(shù)字命名的特殊目錄中,這些目錄下的信息就是內(nèi)核各個(gè)重要子系統(tǒng)的信息和可調(diào)參數(shù),

主要有: 
bus 總線信息(只讀) 
drivers 驅(qū)動(dòng)信息(只讀) 
fs 文件系統(tǒng)特別信息(只讀) 
ide IDE接口信息(只讀) 
irq IRQ信息(只讀) 
net 網(wǎng)絡(luò)子系統(tǒng)信息(只讀) 
scsi SCSI系統(tǒng)信息(只讀) 
sysvipc IPC子系統(tǒng)信息(只讀) 
tty tty子系統(tǒng)信息(只讀) 
sys 系統(tǒng)內(nèi)核可調(diào)參數(shù) (可調(diào)) 
作為L(zhǎng)inux系統(tǒng)內(nèi)核參數(shù)的抽象文件接口,Linux內(nèi)核的大部分默認(rèn)可調(diào)參數(shù)都被放在了 /proc/sys目錄下,這些參數(shù)都以常規(guī)文件的形式體現(xiàn),并且可以用echo/cat等文件操作命令進(jìn)行調(diào)整,調(diào)整的效果是即時(shí)的,并且在系統(tǒng)運(yùn)行的整個(gè)生命周期之間都有效(直到再次改變它們或者系統(tǒng)重啟)。 
當(dāng)然Linux也提供了另外一種途徑sysctl來(lái)調(diào)整這些參數(shù),sysctl是從BSD系統(tǒng)繼承而來(lái)的一種系統(tǒng)參數(shù)動(dòng)態(tài)調(diào)整方法,sysctl的使用更為簡(jiǎn)單,并且可以使用/etc/sysctl.conf保存配置以在下次啟動(dòng)時(shí)自動(dòng)加載這些設(shè)置

     在/proc/sys目錄下存放著大多數(shù)的內(nèi)核參數(shù),并且設(shè)計(jì)成可以在系統(tǒng)運(yùn)行的同時(shí)進(jìn)行更改, 可以通過(guò)更改/proc/sys中內(nèi)核參數(shù)對(duì)應(yīng)的文件達(dá)到修改內(nèi)核參數(shù)的目的(修改過(guò)后,保存配置文件就馬上自動(dòng)生效),不過(guò)重新啟動(dòng)機(jī)器后之前修改的參數(shù)值會(huì)失效,所以只能是一種臨時(shí)參數(shù)變更方案。(適合調(diào)試內(nèi)核參數(shù)優(yōu)化值的時(shí)候使用,如果設(shè)置值有問(wèn)題,重啟服務(wù)器還原原來(lái)的設(shè)置參數(shù)值了。簡(jiǎn)單方便。)

      但是如果調(diào)試內(nèi)核參數(shù)優(yōu)化值結(jié)束后,需要永久保存參數(shù)值,就要通過(guò)修改/etc/sysctl.conf內(nèi)的內(nèi)核參數(shù)來(lái)永久保存更改。但只是修改sysctl文件內(nèi)的參數(shù)值,確認(rèn)保存修改文件后,設(shè)定的參數(shù)值并不會(huì)馬上生效,如果想使參數(shù)值修改馬上生效,并且不重啟服務(wù)器,可以執(zhí)行下面的命令:

#sysctl –p 

五、/proc/sys下內(nèi)核文件與配置文件sysctl.conf中變量的對(duì)應(yīng)關(guān)系

由于可以修改的內(nèi)核參數(shù)都在/proc/sys目錄下,所以sysctl.conf的變量名省略了目錄的前面部分(/proc/sys)。 

即將/proc/sys中的文件轉(zhuǎn)換成sysctl中的變量依據(jù)下面兩個(gè)簡(jiǎn)單的規(guī)則:

1.去掉前面部分/proc/sys

2.將文件名中的斜杠變?yōu)辄c(diǎn)

這兩條規(guī)則可以將/proc/sys中的任一文件名轉(zhuǎn)換成sysctl中的變量名。 

例如:

/proc/sys/net/ipv4/ip_forward =》 net.ipv4.ip_forward

/proc/sys/kernel/hostname =》 kernel.hostname

可以使用下面命令查詢所有可修改的變量名

# sysctl –a

新聞名稱:sysctl與/proc詳解
轉(zhuǎn)載源于:http://bm7419.com/article26/iposjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開(kāi)發(fā)關(guān)鍵詞優(yōu)化、網(wǎng)站策劃小程序開(kāi)發(fā)、移動(dòng)網(wǎng)站建設(shè)、域名注冊(cè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)