最近領了一個任務,系統調優。以前就看了衛國的這篇文章,現在把它轉載過來備查。
文章原名
使用 /proc 檔案系統來控制系統 見http://wgzhao.com/2005/11/16/control-system-with-proc-fs/#more-18
詳細介紹有關 /proc 中每個檔案的用法和確切資訊超出了本文所涉及的範圍。要獲得任何關於本文沒有涉及到的 /proc檔案的其它資訊,一個最佳來源就是 Linux 核心原始碼本身,它包含了一些非常優秀的文檔。對於系統管理員,/proc中的以下檔案較有用。這不意味著它是一份詳盡的說明,而只是日常使用中便於查閱的參考。 /proc/scsi /proc/scsi/scsi
作為系統管理員,需要瞭解的最有用內容是,在有熱交換磁碟機情況下,如何不重啟系統就可以添加更多磁碟空間。假使不使用/proc,您可以插入磁碟機,但為了使系統識別新磁碟,必須隨即重新引導系統。這裡,可以用以下命令來使系統識別新的磁碟機:
echo "scsi add-single-device w x y z" > /proc/scsi/scsi
為使該命令正常運行,必須指定正確的參數值 w、x、y 和 z,如下所示:
w 是主機介面卡標識,第一個適配器為零(0)
x 是主機介面卡上的 SCSI 通道,第一個通道為零(0)
y 是裝置的 SCSI 標識
z 是 LUN 號,第一個 LUN 為零(0)
一旦將磁碟添加到系統中之後,可以掛裝任何先前已格式化的檔案系統,也可以開始對它進行格式化等。例如,如果不確定磁碟是什麼裝置,或者想檢查任何先前已有的分區,則可以用如fdisk -l 這樣的命令來向您報告這方面的資訊。
相反的,在不重新引導系統的情況下將裝置從系統中除去的命令是:
echo "scsi remove-single-device w x y z" > /proc/scsi/scsi
在輸入這條命令並將熱交換 SCSI 磁碟從系統中除去之前,請確保首先卸下已從該磁碟安裝的任何檔案系統。 /proc/sys/fs/ /proc/sys/fs/file-max
該檔案指定了可以分配的檔案控制代碼的最大數目。如果使用者得到的錯誤訊息聲明由於開啟檔案數已經達到了最大值,從而他們不能開啟更多檔案,則可能需要增加該值。可將這個值設定成有任意多個檔案,並且能通過將一個新數字值寫入該檔案來更改該值。
預設設定:4096 /proc/sys/fs/file-nr
該檔案與 file-max 相關,它有三個值:已指派檔案控制代碼的數目已使用檔案控制代碼的數目檔案控制代碼的最大數目該檔案是唯讀,僅用於顯示資訊。 /proc/sys/fs/inode-*
任何以名稱“inode”開頭的檔案所執行的操作與上面那些以名稱“file”開頭的檔案所執行的操作一樣,但所執行的操作與索引節點有關,而與檔案控制代碼無關。 /proc/sys/fs/overflowuid 和 /proc/sys/fs/overflowgid
這兩個檔案分別儲存那些支援 16位使用者標識和組標識的任何檔案系統的使用者標識(UID)和組標識(GID)。可以更改這些值,但如果您確實覺得需要這樣做,那麼您可能會發現更改組和密碼檔案項更容易些。
預設設定:65534 /proc/sys/fs/super-max
該檔案指定超級塊處理常式的最大數目。掛裝的任何檔案系統需要使用超級塊,所以如果掛裝了大量檔案系統,則可能會用盡超級塊處理常式。
預設設定:256 /proc/sys/fs/super-nr
該檔案顯示當前已指派超級塊的數目。該檔案是唯讀,僅用於顯示資訊。 /proc/sys/kernel /proc/sys/kernel/acct
該檔案有三個可配置值,根據包含日誌的檔案系統上可用空間的數量(以百分比表示),這些值控制何時開始進行處理序計量:如果可用空間低於這個百分比值,則停止處理序計量如果可用空間高於這個百分比值,則開始處理序計量檢查上面兩個值的頻率(以秒為單位)要更改這個檔案的某個值,應該回送用空格分隔開的一串數字。
預設設定:2 4 30
如果包含日誌的檔案系統上只有少於 2% 的可用空間,則這些值會使記帳停止,如果有 4% 或更多可用空間,則再次啟動記帳。每 30秒做一次檢查。 /proc/sys/kernel/ctrl-alt-del
該檔案有一個二進位值,該值控制系統在接收到 ctrl+alt+delete 按鍵組合時如何反應。這兩個值表示:零(0)值表示捕獲 ctrl+alt+delete,並將其送至 init 程式。這將允許系統可以完美地關閉和重啟,就好象您輸入 shutdown 命令一樣。壹(1)值表示不捕獲 ctrl+alt+delete,將執行非乾淨的關閉,就好象直接關閉電源一樣。
預設設定:0 /proc/sys/kernel/domainname
該檔案允許您配置網路網域名稱。它沒有預設值,也許已經設定了網域名稱,也許沒有設定。 /proc/sys/kernel/hostname
該檔案允許您配置網路主機名稱。它沒有預設值,也許已經設定了主機名稱,也許沒有設定。 /proc/sys/kernel/msgmax
該檔案指定了從一個進程發送到另一個進程的訊息的最大長度。進程間的訊息傳遞是在核心的記憶體中進行,不會交換到磁碟上,所以如果增加該值,則將增加作業系統所使用的記憶體數量。
預設設定:8192 /proc/sys/kernel/msgmnb
該檔案指定在一個訊息佇列中最大的位元組數。
預設設定:16384 /proc/sys/kernel/msgmni
該檔案指定訊息佇列標識的最大數目。
預設設定:16 /proc/sys/kernel/panic
該檔案表示如果發生“核心嚴重錯誤(kernelpanic)”,則核心在重新引導之前等待的時間(以秒為單位)。零(0)秒設定在發生核心嚴重錯誤時將禁止重新引導。
預設設定:0 /proc/sys/kernel/printk
該檔案有四個數字值,它們根據日誌記錄訊息的重要性,定義將其發送到何處。關於不同記錄層級的更多資訊,請閱讀 syslog(2)線上說明頁。該檔案的四個值為:控制台記錄層級:優先順序高於該值的訊息將被列印至控制台預設的訊息記錄層級:將用該優先順序來列印沒有優先順序的訊息最低的控制台記錄層級:控制台記錄層級可被設定的最小值(最高優先順序)預設的控制台記錄層級:控制台記錄層級的預設值
預設設定:6 4 1 7 /proc/sys/kernel/shmall
該檔案是在任何給定時刻系統上可以使用的共用記憶體的總量(以位元組為單位)。
預設設定:2097152 /proc/sys/kernel/shmax
該檔案指定核心所允許的最大共用記憶體段的大小(以位元組為單位)。
預設設定:33554432 /proc/sys/kernel/shmmni
該檔案表示用於整個系統共用記憶體段的最大數目。
預設設定:4096 /proc/sys/kernel/sysrq
如果該檔案指定的值為非零,則啟用 System Request Key。
預設設定:0 /proc/sys/kernel/threads-max
該檔案指定核心所能使用的線程的最大數目。
預設設定:2048 /proc/sys/net /proc/sys/net/core/message_burst
寫新的警告訊息所需的時間(以 1/10 秒為單位);在這個時間內所接收到的其它警告訊息會被丟棄。這用於防止某些企圖用訊息“淹沒”您系統的人所使用的拒絕服務(Denial ofService)攻擊。
預設設定:50(5 秒) /proc/sys/net/core/message_cost
該檔案存有與每個警告訊息相關的成本值。該值越大,越有可能忽略警告訊息。
預設設定:5 /proc/sys/net/core/netdev_max_backlog
該檔案指定了,在介面接收資料包的速率比核心處理這些包的速率快時,允許送到隊列的資料包的最大數目。
預設設定:300 /proc/sys/net/core/optmem_max
該檔案指定了每個通訊端所允許的最大緩衝區的大小。 /proc/sys/net/core/rmem_default
該檔案指定了接收通訊端緩衝區大小的預設值(以位元組為單位)。 /proc/sys/net/core/rmem_max
該檔案指定了接收通訊端緩衝區大小的最大值(以位元組為單位)。 /proc/sys/net/core/wmem_default
該檔案指定了發送通訊端緩衝區大小的預設值(以位元組為單位)。 /proc/sys/net/core/wmem_max
該檔案指定了發送通訊端緩衝區大小的最大值(以位元組為單位)。 /proc/sys/net/ipv4
所有 IPv4 和 IPv6 的參數都被記錄在核心原始碼文檔中。請參閱檔案/usr/src/linux/Documentation/networking/ip-sysctl.txt。 /proc/sys/net/ipv6
同 IPv4。 /proc/sys/vm /proc/sys/vm/buffermem
該檔案控制用於緩衝區記憶體的整個系統記憶體的數量(以百分比表示)。它有三個值,通過把用空格相隔的一串數字寫入該檔案來設定這三個值。用於緩衝區的記憶體的最低百分比如果發生所剩系統記憶體不多,而且系統記憶體正在減少這種情況,系統將試圖維護緩衝區記憶體的數量。用於緩衝區的記憶體的最高百分比
預設設定:2 10 60 /proc/sys/vm/freepages
該檔案控制系統如何應對各種層級的可用記憶體。它有三個值,通過把用空格相隔的一串數字寫入該檔案來設定這三個值。如果系統中可用頁面的數目達到了最低限制,則只允許核心分配一些記憶體。如果系統中可用頁面的數目低於這一限制,則核心將以較積極的方式啟動交換,以釋放記憶體,從而維持系統效能。核心將試圖保持這個數量的系統記憶體可用。低於這個值將啟動核心交換。
預設設定:512 768 1024 /proc/sys/vm/kswapd
該檔案控制允許核心如何交換記憶體。它有三個值,通過把用空格相隔的一串數字寫入該檔案來設定這三個值:核心試圖一次釋放的最大頁面數目。如果想增加記憶體交換過程中的頻寬,則需要增加該值。核心在每次交換中試圖釋放頁面的最少次數。核心在一次交換中所寫頁面的數目。這對系統效能影響最大。這個值越大,交換的資料越多,花在磁碟尋道上的時間越少。然而,這個值太大會因“淹沒”請求隊列而反過來影響系統效能。
預設設定:512 32 8 /proc/sys/vm/pagecache
該檔案與 /proc/sys/vm/buffermem 的工作內容一樣,但它是針對檔案的記憶體映射和一般快取。
使核心設定具有持久性
這裡提供了一個方便的公用程式,用於更改 /proc/sys 目錄下的任何核心參數。它使您可以更改運行中的核心(類似於上面用到的 echo和重新導向方法),但它還有一個在系統引導時執行的設定檔。這使您可以更改運行中的核心,並將這些更改添加到設定檔,以便於在系統重新引導之後,這些更改仍然生效。
該公用程式稱為 sysctl,在 sysctl(8) 的線上說明頁中,對這個公用程式進行了完整的文檔說明。sysctl 的設定檔是/etc/sysctl.conf,可以編輯該檔案,並在 sysctl.conf(8) 下記錄了該檔案。sysctl 將 /proc/sys下的檔案視為可以更改的單個變數。所以,以 /proc/sys 下的檔案/proc/sys/fs/file-max為例,它表示系統中所允許的檔案控制代碼的最大數目,這個檔案被表示成 fs.file-max。
這個樣本揭示了 sysctl 標記法中的一些奇妙事情。由於 sysctl 只能更改 /proc/sys目錄下的變數,並且人們始終認為變數是在這個目錄下,因此省略了變數名的那一部分(/proc/sys)。另一個要說明的更改是,將目錄分隔字元(正斜杠/)換成了英文中的句號(點 .)。
將 /proc/sys 中的檔案轉換成 sysctl 中的變數有兩個簡單的規則:去掉前面部分 /proc/sys。將檔案名稱中的正斜杠變為點。
這兩條規則使您能將 /proc/sys 中的任一檔案名稱轉換成 sysctl 中的任一變數名。一般檔案到變數的轉換為:
/proc/sys/dir/file --> dir.file dir1.dir2.file --> /proc/sys/dir1/dir2/file
可以使用命令 sysctl -a 查看所有可以更改的變數和其當前設定。
用 sysctl 還可以更改變數,它所做的工作與上面所用的 echo 方法完全一樣。其標記法為:
sysctl -w dir.file="value"
還是用 file-max 作為樣本,使用下面兩種方法中的一種將該值更改為 16384:
sysctl -w fs.file-max="16384"
或者:
echo "16384" > /proc/sys/fs/file-max
不要忘記 sysctl
不會將所做的更改添加到設定檔中;這要您用手工來完成。如果您希望在重新引導之後,前面所做的更改仍然有效,則必須維護這個設定檔。
註:不是所有的分發版都提供 sysctl 支援。如果您的特定系統屬於這種情況,則可以用上面所描述的 echo和重新導向方法,將這些命令添加到啟動指令碼中,這樣系統每次引導時,都會執行它們。
用於設定系統的命令
在系統啟動並執行同時更改其它非核心系統參數,而且在不重新引導系統的情況下使這些設定生效,這種做法是可能的。在 /etc/init.d目錄中列出了包含這些參數的檔案,它們主要按服務、精靈和伺服器來分類。由于越來越多各方面的指令碼可以羅列在這個目錄下,所以這裡不可能討論所有各種配置。不過,下面列舉了一些樣本,這些樣本討論了如何在不同的Linux 分發版上操作 /etc/init.d下的指令碼。這裡的樣本可能很有用,其中討論了更改精靈,然後在不重新引導系統的情形下重新裝入配置:更改 Web 服務器配置,然後重新裝入 Apache除去不需要的 inetd 登入服務作業網路設定通過 NFS 匯出新的檔案系統啟動/停止防火牆
首先,常見的方法是,直接通過 /etc/init.d中的指令碼來作業系統服務。這些指令碼用參數來操作它們所控制的服務;可以通過輸入指令碼名但不帶任何參數這種方法來查看有哪些有效選項。常見的參數有:
start:啟動已停止的服務
stop:停止正在啟動並執行服務
restart:停止正在啟動並執行服務,然後再重啟該服務;它將啟動已停止的服務
reload:在不中斷任何串連的情況下,重新裝入服務配置
status:報表服務處於運行狀態,還是停止狀態
例如,下面這條命令將在不終止任何已串連的使用者會話的情形下,重新裝入 xinetd 配置(如果您更改了/etc/xinetd.conf,那麼這條命令很有用):
/etc/init.d/xinetd reload
Red Hat 提供了 service 這條命令,它可以為您操作服務。service命令提供的功能與輸入指令碼名本身的功能一樣。它的文法如下所示:
service script-name [parameter]
例如:
service xinetd reload
SuSE 也提供名為 rc 的命令。該命令類似於上面的 service 命令,但該命令與指令碼名之間沒有空格。它的文法如下所示:
rc{script-name} parameter
例如:
rcapache start
與更改核心參數類似,一旦重新引導系統,則對這些服務的更改將會丟失。現在越來越多的分發版開始採用 chkconfig命令,它管理在各種運行層級下(包括引導時)啟動的服務。在撰寫本文時,chkconfig 命令的文法會因 Linux版本的不同而略有差異,不過如果輸入不帶任何參數的命令 chkconfig,則會顯示一個如何使用該命令的列表。也可以通過 chkconfig(8)的線上說明頁找到更多有關 chkconfig 的資訊。
http://www-900.ibm.com/developerWorks/cn/linux/l-adfly/index.shtml