什麼是proc檔案系統
proc檔案系統是一個偽檔案系統,它只存在記憶體當中,而不佔用外存空間。它以檔案系統的方式為訪問系統核心資料的操作提供介面。使用者和應用程式可以通過proc得到系統的資訊,並可以改變核心的某些參數。由於系統的資訊,如進程,是動態改變的,所以使用者或應用程式讀取proc檔案時,proc檔案系統是動態從系統核心讀出所需資訊並提交的。它的目錄結構如下:
目錄名稱 目錄內容
apm 進階電源管理資訊
cmdline 核心命令列
Cpuinfo 關於Cpu資訊
Devices 可以用到的裝置(塊裝置/字元裝置)
Dma 使用的DMA通道
Filesystems 支援的檔案系統
Interrupts 中斷的使用
Ioports I/O連接埠的使用
Kcore 核心核心印象
Kmsg 核心訊息
Ksyms 核心符號表
Loadavg 負載平衡
Locks 核心鎖
Meminfo 記憶體資訊
Misc 雜項
Modules 載入模組列表
Mounts 載入的檔案系統
Partitions 系統識別的分區表
Rtc 系統時鐘
Slabinfo Slab池資訊
Stat 全面統計狀態表
Swaps 對換空間的利用情況
Version 核心版本
Uptime 系統正常已耗用時間
並不是所有這些目錄在你的系統中都有,這取決於你的核心配置和裝載的模組。另外,在/proc下還有三個很重要的目錄:net,scsi和sys。Sys目錄是可寫的,可以通過它來訪問或修改核心的參數(見下一部分),而net和scsi則依賴於核心配置。例如,如果系統不支援scsi,則scsi目錄不存在。
除了以上介紹的這些,還有的是一些以數字命名的目錄,它們是進程目錄。系統中當前啟動並執行每一個進程都有對應的一個目錄在/proc下,以進程的PID號為目錄名,它們是讀取進程資訊的介面。而self目錄則是讀取進程本身的資訊介面,是一個link。Proc檔案系統的名字就是由之而起。進程目錄的結構如下:
目錄名稱 目錄內容
Cmdline 命令列參數
Environ 環境變數值
Fd 一個包含所有檔案描述符的目錄
Mem 進程的記憶體被利用情況
Stat 進程狀態
Status 進程目前狀態,以可讀的方式顯示出來
Cwd 當前工作目錄的連結
Exe 指向該進程的執行命令檔案
Maps 記憶體映象
Statm 進程記憶體狀態資訊
Root 連結此進程的root目錄
使用者如果要查看系統資訊,可以用cat命令。例如:
# cat /proc/interrupts
CPU0
0: 8728810 XT-PIC timer
1: 895 XT-PIC keyboard
2: 0 XT-PIC cascade
3: 531695 XT-PIC aha152x
4: 2014133 XT-PIC serial
5: 44401 XT-PIC pcnet_cs
8: 2 XT-PIC rtc
11: 8 XT-PIC i82365
12: 182918 XT-PIC Mouse
13: 1 XT-PIC fpu PS/2
14: 1232265 XT-PIC ide0
15: 7 XT-PIC ide1
NMI: 0
使用者還可以實現修改核心參數。在/proc檔案系統中有一個有趣的目錄:/proc/sys。它不僅提供了核心資訊,而且可以通過它修改核心參數,來最佳化你的系統。但是你必須很小心,因為可能會造成系統崩潰。最好是先找一台無關緊要的機子,調試成功後再應用到你的系統上。
要改變核心的參數,只要用vi編輯或echo參數重新導向到檔案中即可。下面有一個例子:
# cat /proc/sys/fs/file-max
4096
# echo 8192 > /proc/sys/fs/file-max
# cat /proc/sys/fs/file-max
8192
如果你最佳化了參數,則可以把它們寫成添加到檔案rc.local中,使它在系統啟動時自動完成修改。
/proc檔案系統中網路參數
在/proc/sys/net/ipv4/目錄下,包含的是和tcp/ip協議相關的各種參數,下面我們就對這些網路參數加以詳細的說明。
ip_forward 參數類型:BOOLEAN
0 - 關閉(預設值)
not 0 - 開啟ip轉寄
在網路本地介面之間轉寄資料報。該參數非常特殊,對該參數的修改將導致其它所有相關配置參數恢複其預設值(對於主機參閱RFC1122,對於路由器參見RFC1812)
ip_default_ttl 參數類型:INTEGER
預設值為 64 。表示IP資料報的Time To Live值。
ip_no_pmtu_disc 參數類型:BOOLEAN
關閉路徑MTU探測,預設值為FALSE
ipfrag_high_thresh 參數類型:整型
用來組裝分段的IP包的最大記憶體量。當ipfrag_high_thresh數量的記憶體被分配來用來組裝IP包,則IP分區處理器將丟棄資料報直到ipfrag_low_thresh數量的記憶體被用來組裝IP包。
ipfrag_low_thresh 參數類型:整型
參見ipfrag_high_thresh。
ipfrag_time 參數類型:整型
儲存一個IP分區在記憶體中的時間。
inet_peer_threshold 參數類型:整型
INET對端儲存空間某個合適值,當超過該閥值條目將被丟棄。該閥值同樣決定存留時間以及廢物收集通過的時間間隔。條目越多﹐存活期越低﹐GC 間隔越短
inet_peer_minttl 參數類型:整型
條目的最低存活期。在重組端必須要有足夠的片段(fragment)存活期。這個最低存活期必須保證緩衝池容積是否少於 inet_peer_threshold。該值以 jiffies為單位測量。
inet_peer_maxttl 參數類型:整型
條目的最大存活期。在此期限到達之後﹐如果緩衝池沒有耗盡壓力的話(例如﹐緩衝池中的條目數目非常少)﹐不使用的條目將會逾時。該值以 jiffies為單位測量。
inet_peer_gc_mintime 參數類型:整型
廢物收集(GC)通過的最短間隔。這個間隔會影響到緩衝池中記憶體的高壓力。 該值以 jiffies為單位測量。
inet_peer_gc_maxtime 參數類型:整型
廢物收集(GC)通過的最大間隔,這個間隔會影響到緩衝池中記憶體的低壓力。 該值以 jiffies為單位測量。
tcp_syn_retries 參數類型:整型
對於一個建立串連,核心要發送多少個 SYN 串連請求才決定放棄。不應該大於255,預設值是5,對應於180秒左右。
tcp_synack_retries 參數類型:整型
對於遠端的串連請求SYN,核心會發送SYN + ACK資料報,以確認收到上一個 SYN串連請求包。這是所謂的三向交握( threeway handshake)機制的第二個步驟。這裡決定核心在放棄串連之前所送出的 SYN+ACK 數目。
tcp_keepalive_time 參數類型:整型
當keepalive開啟的情況下,TCP發送keepalive訊息的頻率,預設值是2個小時。
tcp_keepalive_probes 參數類型:整型
TCP發送keepalive探測以確定該串連已經斷開的次數,預設值是9。
tcp_keepalive_interval 參數類型:整型
探測訊息發送的頻率,乘以tcp_keepalive_probes就得到對於從開始探測以來沒有響應的串連殺除的時間。預設值為75秒,也就是沒有活動的串連將在大約11分鐘以後將被丟棄。
tcp_retries1 參數類型:整型
當出現可疑情況而必須向網路層報告這個可疑狀況之前﹐需要進行多少次重試。最低的 RFC 數值是 3 ﹐這也是預設值﹐根據RTO的值大約在3秒 - 8分鐘之間。
tcp_retries2 參數類型:整型
在丟棄啟用的TCP串連之前﹐需要進行多少次重試。RFC1122規定,該值必須大於100秒。預設值為15,根據RTO的值來決定,相當於13-30分鐘,
tcp_orphan_retries 參數類型:整型
在近端丟棄TCP串連之前﹐要進行多少次重試。預設值是 7 個﹐相當於 50秒 - 16分鐘﹐視 RTO 而定。如果您的系統是負載很大的web伺服器﹐那麼也許需要降低該值﹐這類 sockets 可能會耗費大量的資源。另外參的考 tcp_max_orphans 。
tcp_fin_timeout 參數類型:整型
對於本端斷開的socket串連,TCP保持在FIN-WAIT-2狀態的時間。對方可能會中斷連線或一直不結束串連或不可預料的進程死亡。預設值為 60 秒。過去在2.2版本的核心中是 180 秒。您可以設定該值﹐但需要注意﹐如果您的機器為負載很重的web伺服器﹐您可能要冒記憶體被大量無效資料報填滿的風險﹐FIN-WAIT-2 sockets 的危險性低於 FIN-WAIT-1 ﹐因為它們最多隻吃 1.5K 的記憶體﹐但是它們存在時間更長。另外參考 tcp_max_orphans。
tcp_max_tw_buckets 參數類型:整型
系統在同時所處理的最大timewait sockets 數目。如果超過此數的話﹐time-wait socket 會被立即砍除並且顯示警告資訊。之所以要設定這個限制﹐純粹為了抵禦那些簡單的 DoS 攻擊﹐千萬不要人為的降低這個限制﹐不過﹐如果網路條件需要比預設值更多﹐則可以提高它(或許還要增加記憶體)。
tcp_tw_recycle 參數類型:布爾
開啟快速 TIME-WAIT sockets 回收。預設值是1。除非得到技術專家的建議或要求﹐請不要隨意修改這個值。
tcp_max_orphans 參數類型:整型
系統所能處理不屬於任何進程的TCP sockets最大數量。假如超過這個數量﹐那麼不屬於任何進程的串連會被立即reset,並同時顯示警告資訊。之所以要設定這個限制﹐純粹為了抵禦那些簡單的 DoS 攻擊﹐千萬不要依賴這個或是人為的降低這個限制
tcp_abort_on_overflow 參數類型:布爾
當守護進程太忙而不能接受新的串連,就象對方發送reset訊息,預設值是false。這意味著當溢出的原因是因為一個偶然的猝發,那麼串連將恢複狀態。只有在你確信守護進程真的不能完成串連請求時才開啟該選項,該選項會影響客戶的使用。
tcp_syncookies 參數類型:整型
只有在核心編譯時間選擇了CONFIG_SYNCOOKIES時才會發生作用。當出現syn等候隊列出現溢出時象對方發送syncookies。目的是為了防止syn flood攻擊。預設值是false。
注意:該選項千萬不能用於那些沒有收到攻擊的高負載伺服器,如果在日誌中出現synflood訊息,但是調查發現沒有收到synflood攻擊,而是合法使用者的串連負載過高的原因,你應該調整其它參數來提高伺服器效能。參考: tcp_max_syn_backlog, tcp_synack_retries, tcp_abort_on_overflow.
syncookie嚴重的違背TCP協議,不允許使用TCP擴充,可能對某些服務導致嚴重的效能影響(如SMTP轉寄)。
tcp_stdurg 參數類型:整型
使用 TCP urg pointer 欄位中的主機請求解釋功能。大部份的主機都使用老舊的 BSD解釋,因此如果您在 Linux 開啟它﹐或會導致不能和它們正確溝通。預設值為為﹕FALSE
tcp_max_syn_backlog 參數類型:整型
對於那些依然還未獲得用戶端確認的串連請求﹐需要儲存在隊列中最大數目。對於超過 128Mb 記憶體的系統﹐預設值是 1024 ﹐低於 128Mb 的則為 128。如果伺服器經常出現過載﹐可以嘗試增加這個數字。警告﹗假如您將此值設為大於 1024﹐最好修改 include/net/tcp.h 裡面的 TCP_SYNQ_HSIZE ﹐以保持 TCP_SYNQ_HSIZE*16<=tcp_max_syn_backlog ﹐並且編進核心之內。
tcp_window_scaling 參數類型:布爾
正常來說,TCP/IP 可以接受最大到65535位元組的 windows。對於寬頻網路,該值可能是不夠的,通過調整該參數有助於提高寬頻伺服器效能。
tcp_timestamps 參數類型:布爾
Timestamps 用在其它一些東西中﹐可以防範那些偽造的 sequence 號碼。一條1G的寬頻線路或許會重遇到帶 out-of-line數值的舊sequence 號碼(假如它是由於上次產生的)。Timestamp 會讓它知道這是個 '舊封包'。
tcp_sack 參數類型:布爾
使用 Selective ACK﹐它可以用來尋找特定的遺失的資料報--- 因此有助於快速恢複狀態。
tcp_fack 參數類型:布爾
開啟FACK擁塞避免和快速重傳功能。
tcp_dsack 參數類型:布爾
允許TCP發送"兩個完全相同"的SACK。
tcp_ecn 參數類型:布爾
開啟TCP的直接擁塞通告功能。
tcp_reordering 參數類型:整型
TCP流中重排序的資料報最大數量預設值是 3 。
tcp_retrans_collapse 參數類型:布爾
對於某些有bug的印表機提供針對其bug的相容性。
tcp_wmem - 三個整數的向量: min, default, max
min:為TCP socket預留用於發送緩衝的記憶體最小值。每個tcp socket都可以在建議以後都可以使用它。預設值為4K。
default:為TCP socket預留用於發送緩衝的記憶體數量,預設情況下該值會影響其它協議使用的net.core.wmem_default 值,一般要低於net.core.wmem_default的值。預設值為16K。
max: 用於TCP socket發送緩衝的記憶體最大值。該值不會影響net.core.wmem_max,今天選擇參數SO_SNDBUF則不受該值影響。預設值為128K。
tcp_rmem - 三個整數的向量: min, default, max
min:為TCP socket預留用於接收緩衝的記憶體數量,即使在記憶體出現緊張情況下tcp socket都至少會有這麼多數量的記憶體用於接收緩衝,預設值為8K。
default:為TCP socket預留用於接收緩衝的記憶體數量,預設情況下該值影響其它協議使用的 net.core.wmem_default 值。該值決定了在tcp_adv_win_scale、tcp_app_win和tcp_app_win:0是預設值情況下,tcp 視窗大小為65535。
max:用於TCP socket接收緩衝的記憶體最大值。該值不會影響 net.core.wmem_max,今天選擇參數 SO_SNDBUF則不受該值影響。預設值為 128K。預設值為87380*2 bytes。
tcp_mem - 三個整數的向量: low, pressure, high
low:當TCP使用了低於該值的記憶體頁面數時,TCP不會考慮釋放記憶體。
pressure:當TCP使用了超過該值的記憶體頁面數量時,TCP試圖穩定其記憶體使用量,進入pressure模式,當記憶體消耗低於low值時則退出pressure狀態。
high:允許所有tcp sockets用於排隊緩衝資料報的頁面量。
一般情況下這些值是在系統啟動時根據系統記憶體數量計算得到的。
tcp_app_win - 整數
保留max(window/2^tcp_app_win, mss)數量的視窗由於應用緩衝。當為0時表示不需要緩衝。預設值是31。
tcp_adv_win_scale - 整數
計算緩衝開銷bytes/2^tcp_adv_win_scale(如果tcp_adv_win_scale > 0)或者bytes-bytes/2^(-tcp_adv_win_scale)(如果tcp_adv_win_scale <= 0),預設值為2。
ip_local_port_range - 兩個整數
定於TCP和UDP使用的本地連接埠範圍,第一個數是開始,第二個數是最後連接埠號碼,預設值依賴於系統中可用的記憶體數:
> 128Mb 32768-61000
< 128Mb 1024-4999 or even less.
該值決定了活動串連的數量,也就是系統可以並發的串連數
icmp_echo_ignore_all - 布爾類型
icmp_echo_ignore_broadcasts - 布爾類型
如果任何一個設定為true(>0)則系統將忽略所有發送給自己的ICMP ECHO請求或那些廣播位址的請求。
icmp_destunreach_rate - 整數
icmp_paramprob_rate - 整數
icmp_timeexceed_rate - 整數
icmp_echoreply_rate - 整數(not enabled per default)
限制發向特定目標的ICMP資料報的最大速率。0表示沒有任何限制,否則表示jiffies資料單位中允許發送的個數。
icmp_ignore_bogus_error_responses - 布爾類型
某些路由器違背RFC1122標準,其對廣播幀發送偽造的響應來應答。這種違背行為通常會被以警示的方式記錄在系統日誌中。如果該選項設定為True,核心不會記錄這種警告資訊。預設值為False。
(1) Jiffie: 核心使用的內部時間單位,在i386系統上大小為1/100s,在Alpha中為1/1024S。在/usr/include/asm/param.h中的HZ定義有特定系統的值。
conf/interface/*:
conf/all/*是特定的,用來修改所有介面的設定,is special and changes the settings for all interfaces.
Change special settings per interface.
log_martians - 布爾類型
記錄帶有不允許的地址的資料報到核心日誌中。
accept_redirects - 布爾類型
收發接收ICMP重新導向訊息。對於主機來說預設為True,對於用作路由器時預設值為False。
forwarding - 布爾類型
在該介面開啟轉寄功能
mc_forwarding - 布爾類型
是否進行多播路由。只有核心編譯有CONFIG_MROUTE並且有路由服務程式在運行該參數才有效。
proxy_arp - 布爾類型
開啟proxy arp功能。
shared_media - 布爾類型
發送(路由器)或接收(主機) RFC1620 共用媒體重新導向。覆蓋ip_secure_redirects的值。預設為True。
secure_redirects - 布爾類型
僅僅接收發給預設閘道列表中網關的ICMP重新導向訊息,預設值是TRUE。
send_redirects - 布爾類型
如果是router,發送重新導向訊息,預設值是TRUE
bootp_relay - 布爾類型
接收源地址為0.b.c.d,目的地址不是原生資料報。用來支援BOOTP轉寄服務進程,該進程將捕獲並轉寄該包。預設為False,目前還沒有實現。
accept_source_route - 布爾類型
接收帶有SRR選項的資料報。對於主機來說預設為False,對於用作路由器時預設值為True。
rp_filter 參數類型
1 - 通過反向路徑回溯進行源地址驗證(在RFC1812中定義)。對於單穴主機和stub網路路由器推薦使用該選項。
0 - 不通過反向路徑回溯進行源地址驗證。
預設值為0。某些發布在啟動時自動將其開啟。