Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

5.4. 微調處理能力

請閱讀此節以了解記憶體、kernel、與檔案系統處理能力的概觀,以上三者的相關參數,以及調整這些參數的優劣。
要在微調時暫時設定這些值,請將要設定的值利用 echo 指令傳送到 proc 檔案系統中的正確檔案。例如要暫時設定 overcommit_memory1,請執行:
# echo 1 > /proc/sys/vm/overcommit_memory
請注意,proc 檔案系統中用來設定參數的路徑,會因為系統而有所不同。
要永久設定這些值,請使用 sysctl 指令。欲知更多詳情,請參閱《建置指南》,網址為 https://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/?locale=zh-TW

與處理能力相關的記憶體微調參數

以下所有參數都位於 proc 檔案系統中的 /proc/sys/vm/ 裡。
overcommit_memory
定義接受或拒絕大型記憶體需求的狀況。此參數有三種可用值:
  • 0 — 預設設定。kernel 會進行探索式的記憶體過度寫入處理,方法是預測記憶體的可用量、並讓公然違規的需求失敗。不幸的是,因為記憶體是以探索式、而非精準的演算法則來分配,因此這設定有時會過度使用系統上的可用記憶體。
  • 1 — kernel 不進行記憶體過度寫入處理。在此設定下,過度使用記憶體的機會會增加,但對於頻繁存取記憶體的任務來說,效能也會增加。
  • 2 — kernel 拒絕相等或大於總可用置換空間與實體記憶體比例(於 overcommit_ratio 指定)的記憶體需求。如果您想要降低記憶體過度寫入的風險,這是最佳設定。

    注意

    這設定建議用於置換空間大於實體記憶體的系統上。
overcommit_ratio
指定 overcommit_memory 設為 2 的時候,實體記憶體的比例。預設值為 50
max_map_count
定義一組程序可使用的記憶體對應區域之最大值。在大部分情況下,預設值 65530 就很適合。如果應用程式需要對應多於此數目的檔案,請增加這個值。
nr_hugepages
定義 kernel 中配置的巨型分頁數。預設值為 0。只有在系統上擁有連續且足夠的實體記憶體時,才可以分配(或取消分配)巨型分頁。以此參數保留的分頁不能用做其它用途。欲知更多資訊,請參閱安裝於系統中的文件:/usr/share/doc/kernel-doc-kernel_version/Documentation/vm/hugetlbpage.txt

與處理能力相關的 kernel 微調參數

以下所有參數都位於 proc 檔案系統中的 /proc/sys/kernel/ 裡。
msgmax
定義訊息佇列中,任何單一訊息的最大允許大小,單位為位元組。這個值不能超過佇列的大小(msgmnb)。預設值為 65536
msgmnb
定義單一訊息佇列的最大大小,單位為位元組。預設值為 65536 位元組。
msgmni
定義訊息佇列辨識子的最大數量(也因此是佇列的最大數量)。64 位元電腦的預設值為 1985;32 位元電腦的預設值為 1736
shmall
定義系統上一次可以使用的共享記憶體總數,單位為位元組。64 位元電腦的預設值為 4294967296;32 位元電腦的預設值為 268435456
shmmax
定義允許用於 kernel 的最大共享記憶體區段,單位為位元組。64 位元電腦的預設值為 68719476736;32 位元電腦的預設值為 4294967295。然而請注意,kernel 能支援的數量遠超過這個值。
shmmni
定義系統全域的共享記憶體區域之最大數量。64 與 32 位元的預設值均為 4096
threads-max
定義系統全域中,kernel 一次可使用的執行續(任務)總數。預設值與 kernel 的 max_threads 值相同。使用的公式為:
max_threads = mempages / (8 * THREAD_SIZE / PAGE_SIZE )
threads-max 的最小值為 20

與處理能力相關的檔案系統微調參數

以下所有參數都位於 proc 檔案系統中的 /proc/sys/fs/ 裡。
aio-max-nr
定義位於所有非同步 I/O 情況的事件之最大允許數。預設值為 65536。請注意,改變這個值並不會預先分配任何 kernel 資料結構或改變其大小。
file-max
列出 kernel 分配的檔案處理之最大數量。預設值與 kernel 中的 files_stat.max_files 值相符,亦即設定為 (mempages * (PAGE_SIZE / 1024)) / 10NR_FILE(RHEL 的值為 8192),兩者取其大者。如果可用的檔案處理不夠而發生錯誤,加大這個值可以解決問題。

OOM Killer 的微調參數

OOM(記憶體不足,Out of Memory)指得是一種運算狀態,其中所有可用記憶體,包括置換空間,都已經分配出去。預設上,這種情況會導致系統當機並停止運作。然而,將 /proc/sys/vm/panic_on_oom 參數設為 0,會告訴 kernel 在 OOM 發生時,呼叫 oom_killer 函式。通常 oom_killer 會終結有問題的程序,系統便可正常運作。
以下參數可以針對單一程序來設定,讓使用者對於被 oom_killer 函式刪除的程序,進行更深的控制。它位於 proc 檔案系統的 /proc/pid/ 之下,其中 pid 是程序 ID。
oom_adj
定義從 -1615 之間的值,決定程序的 oom_scoreoom_score 愈高,程序就愈有可能被 oom_killer 刪除。設定 oom_adj 的值為 -17 會取消 oom_killer 對於該程序之功能。

重要

任何調整過的程序之子程序,都會繼承父程序的 oom_score。舉例來說,如果一組 sshd 程序不會被 oom_killer 函式所終結,那麼所有由該組 SSH session 所啟動的程序也不會被終結。發生 OOM 時,這會影響 oom_killer 函式挽救系統的能力。