/proc 即時管理 Linux

來源:互聯網
上載者:User

/proc 檔案系統是 Linux 的優秀特性之一,本文向您詳細講述了它的一些最實用的基礎知識。使用 /proc,您再也不用關閉並重新引導機器來管理作業系統的許多細節問題,這對那些要求系統的可用性儘可能高的管理員來說非常有用。

任何管理過具有商業重要性的系統的人都知道電腦正常已耗用時間的價值 — 或者反過來講,知道使用者因故障時間會給您帶來諸多頭痛問題。公司採用 UNIX 伺服器的主要原因之一是由於它的可靠性和穩定性。如果仔細管理,通常可以很長時間不需重啟這些伺服器。為了做到盡善盡美,您可以即時執行一些管理工作,甚至是核心這一層級的任務,從而保持伺服器的可用性。雖然因升級硬體或因某人踢掉電源線而仍需要重啟系統,但瞭解到許多管理工作可以在不干擾服務的情況下執行,總是有益的。

本文提供了 不需要重新引導就能夠執行關於各種管理工作和更改系統的提示和技巧。Linux 提供了各種方法,用以在保持系統正常啟動並執行情況下,更改底層作業系統的值和設定。這些方法有兩種基本形式,一種形式對於所有 Linux 系統都是通用的,並在 Linux 核心中提供這一形式(您可以在 Linux Kernel Archives 上尋找更多關於 Linux 核心的資訊和下載核心原始碼;請參閱 參考資料,裡面有至 Linux Kernel Archives 的連結),還有一種形式是各分發版所專屬的,並且由供應商提供。本文將討論這兩種方法。

更改運行中的核心的參數

Linux 向管理員提供了非常好的方法,使他們可以在系統運行時更改核心,而不需要重新引導核心/系統。這是通過 /proc 虛擬檔案系統實現的。Linux Gazette 給出了一份有關 /proc 的參考,它是我所看到過的最簡單且最容易的參考之一。(請參閱 參考資料,其中有至這篇文章的連結。) /proc 檔案系統主要可以讓您查看運行中的核心,這一點對於監控效能、尋找系統資訊、瞭解系統是如何配置的以及更改該配置很有用。該檔案系統被稱為 虛擬檔案系統,因為它實際上根本不是一個檔案系統。它只是核心提供的一個映射,被附加在通常的檔案系統結構之上,從而使您能夠訪問它。

我們可以採用某種方法在系統正常啟動並執行同時更改運行中的核心的參數,這一事實賦予了系統管理員在更改核心設定方面強大的能力和高的靈活性。這種實現是出自部分 Linux 核心開發人員富有靈感的想法。但能力太大會是一件壞事嗎?有時確實如此。如果準備更改 /proc 檔案系統中的任何內容,您 必須確保自己知道在更改什麼以及這會對系統產生什麼影響。這些技術確實有用,但錯誤的舉動會帶來完全不希望得到的結果。如果您不熟悉這方面的內容,或者不確定您所做的某項更改會帶來什麼影響,那麼請在一台對您或您公司不重要的機器上進行實踐。

 



回頁首

如何更改

首先,考慮怎樣做 不會對核心變更。有兩條充分的理由說明了為什麼不能直接切換至 /proc 檔案系統,用文字編輯器開啟一個檔案,做一系列更改,然後儲存該檔案,再退出。這兩條理由是:

  • 資料完整性:所有這些檔案描述了運行中的系統,由於核心可以隨時更改這些檔案中的任何一個,因此如果開啟一個編輯器,然後更改某些資料,而同時,系統也正在底層更改這些資料,那麼無論您儲存下來的任何內容都不可能是核心所期望的內容。
  • 虛擬檔案:所有這些檔案實際上都不存在。如何使儲存的資料同步,等等?

 

所以,解決辦法是,不使用編輯器來更改任何這些檔案。每當更改 /proc 檔案系統中的任何內容時,應該使用 echo 命令,然後從命令列將輸出重新導向至 /proc 下所選定的檔案中。例如:

echo "Your-New-Kernel-Value" > /proc/your/file

類似的,如果希望查看 /proc 中的資訊,應該使用專門用於此用途的命令,或者使用命令列下的 cat 命令。

 



回頁首

更改什麼

要很好地使用 /proc 不需要您是一位核心方面的高手,只需基本瞭解這個檔案系統的結構就可以極大地協助您。直到有一天使用者向您詢問某些特定的功能,使您很高興曾下功夫瞭解過在哪裡變更,您才可能會覺得有必要知道關於 /proc 中的任何事情。在這方面, /proc 檔案系統通過其結構和檔案許可權協助系統管理員。

/proc 中的每個檔案都有一組分配給它的非常特殊的檔案許可權,並且每個檔案屬於特定的使用者標識。這一點實現得非常仔細,從而提供給管理員和使用者正確的功能。下面這個列表匯總了各個檔案上有哪些特定的許可權:

  • 唯讀:任何使用者都不能更改該檔案;它用於表示系統資訊
  • root 寫:如果 /proc 中的某個檔案是可寫的,則通常只能由 root 使用者來寫
  • root 讀:有些檔案對一般系統使用者是不可見的,而只對 root 使用者是可見的
  • 其它:出於各種原因,您可能會看到不同於上面常見的三種許可權的組合

 

關於 /proc ,您會發現最通常的情況是,它的大多數檔案是唯讀,除了 /proc/sys 目錄。該目錄下存放著大多數的核心參數(而不是資訊),並且設計成可以在系統啟動並執行同時變更。因此這個目錄是本文的主旨所在。

就更改 /proc 中什麼內容而言,要瞭解的最後一點是,應該向這些檔案實際寫些什麼。當查看 /proc 中各種檔案時,會發現其中一些檔案對我們來說是可讀的,一些檔案是資料檔案。通過用特定的公用程式(譬如 toplspcifree ),這些資料檔案仍然也可讀。您還會注意到,對我們來說可讀檔案有兩種不同格式:一些是二進位開關,另一些包含其它資訊。二進位開關檔案只包含代表特定核心功能的 0(關)或 1(開)。

 



回頁首

變更

詳細介紹有關 /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
該檔案有三個可配置值,根據包含日誌的檔案系統上可用空間的數量(以百分比表示),這些值控制何時開始進行處理序計量:

  1. 如果可用空間低於這個百分比值,則停止處理序計量
  2. 如果可用空間高於這個百分比值,則開始處理序計量
  3. 檢查上面兩個值的頻率(以秒為單位)

要更改這個檔案的某個值,應該回送用空格分隔開的一串數字。

 

預設設定:2 4 30

如果包含日誌的檔案系統上只有少於 2% 的可用空間,則這些值會使記帳停止,如果有 4% 或更多可用空間,則再次啟動記帳。每 30 秒做一次檢查。

/proc/sys/kernel/ctrl-alt-del
該檔案有一個二進位值,該值控制系統在接收到 ctrl+alt+delete 按鍵組合時如何反應。這兩個值表示:

  1. 零(0)值表示捕獲 ctrl+alt+delete,並將其送至 init 程式。這將允許系統可以完美地關閉和重啟,就好象您輸入 shutdown 命令一樣。
  2. 壹(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
該檔案表示如果發生“核心嚴重錯誤(kernel panic)”,則核心在重新引導之前等待的時間(以秒為單位)。零(0)秒設定在發生核心嚴重錯誤時將禁止重新引導。

預設設定:0

/proc/sys/kernel/printk
該檔案有四個數字值,它們根據日誌記錄訊息的重要性,定義將其發送到何處。關於不同記錄層級的更多資訊,請閱讀 syslog(2) 線上說明頁。該檔案的四個值為:

  1. 控制台記錄層級:優先順序高於該值的訊息將被列印至控制台
  2. 預設的訊息記錄層級:將用該優先順序來列印沒有優先順序的訊息
  3. 最低的控制台記錄層級:控制台記錄層級可被設定的最小值(最高優先順序)
  4. 預設的控制台記錄層級:控制台記錄層級的預設值

 

預設設定: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 of Service)攻擊。

預設設定: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
該檔案控制用於緩衝區記憶體的整個系統記憶體的數量(以百分比表示)。它有三個值,通過把用空格相隔的一串數字寫入該檔案來設定這三個值。

  1. 用於緩衝區的記憶體的最低百分比
  2. 如果發生所剩系統記憶體不多,而且系統記憶體正在減少這種情況,系統將試圖維護緩衝區記憶體的數量。
  3. 用於緩衝區的記憶體的最高百分比

 

預設設定:2 10 60

/proc/sys/vm/freepages
該檔案控制系統如何應對各種層級的可用記憶體。它有三個值,通過把用空格相隔的一串數字寫入該檔案來設定這三個值。

  1. 如果系統中可用頁面的數目達到了最低限制,則只允許核心分配一些記憶體。
  2. 如果系統中可用頁面的數目低於這一限制,則核心將以較積極的方式啟動交換,以釋放記憶體,從而維持系統效能。
  3. 核心將試圖保持這個數量的系統記憶體可用。低於這個值將啟動核心交換。

 

預設設定:512 768 1024

/proc/sys/vm/kswapd
該檔案控制允許核心如何交換記憶體。它有三個值,通過把用空格相隔的一串數字寫入該檔案來設定這三個值:

  1. 核心試圖一次釋放的最大頁面數目。如果想增加記憶體交換過程中的頻寬,則需要增加該值。
  2. 核心在每次交換中試圖釋放頁面的最少次數。
  3. 核心在一次交換中所寫頁面的數目。這對系統效能影響最大。這個值越大,交換的資料越多,花在磁碟尋道上的時間越少。然而,這個值太大會因“淹沒”請求隊列而反過來影響系統效能。

 

預設設定: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 的資訊。

 



回頁首

結束語

使用 /proc 檔案系統即時配置 Linux 核心不是一件輕鬆的事情,然而一旦瞭解了該檔案系統的結構,以及掌握了如何操作各種檔案和參數,則您就擁有了一個功能強大的工具,使您的伺服器在任何時候都可用。

 



回頁首

致謝

我十分感謝 Adrian Fewings 先生對本文的校對。

參考資料

  • 您可以參閱本文在 developerWorks 全球網站上的 英文原文.
  • 在 Linux Kernel Archives 網頁上 下載 Linux 核心,或者參與有關 Linux 核心方面的事情,或者僅僅瞭解 Linux 核心方面的資訊。

  • 請參閱安裝核心原始碼的“Documentation”目錄中有關核心的文檔。

  • 瞭解來自 Linux Gazette 的關於 /proc 虛擬檔案系統的更多資訊。

  • 請閱讀 sysctl(8) 和 sysctl.conf(8) 的線上說明頁。

  • 在 Linux Documentation Project首頁上,可以找到更多 Linux 文檔。

  • 有關硬體問題方面的故障診斷指南,請閱讀“ Linux 硬體穩定性指南,第 1 部分”( developerWorks,2001 年 3 月)和“ Linux 硬體穩定性指南,第 2 部分”( developerWorks,2001 年 7 月)。

  • “ 理解 Linux 設定檔”( developerWorks,2001 年 12 月)概述了控制許可權、系統應用程式、精靈和其它方面的設定檔。

  • “ 配置和編譯核心”( developerWorks,2002 年 5 月)這篇文章一步一步地向您講述了從原始碼編譯 Linux 核心的基本任務。

  • 如果您想瞭解,“高可用性”對於大型主機意味著什麼,則請閱讀 IBM Redpaper“ Linux on IBM zSeries and S/390: High Availability for z/VM and Linux”。

  • developerWorksLinux 專區尋找更多有關 針對 Linux 開發人員的參考資料。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.