Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
5.4. 微調處理能力
請閱讀此節以了解記憶體、kernel、與檔案系統處理能力的概觀,以上三者的相關參數,以及調整這些參數的優劣。
要在微調時暫時設定這些值,請將要設定的值利用 echo 指令傳送到 proc 檔案系統中的正確檔案。例如要暫時設定
overcommit_memory
為 1
,請執行:
# 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)) / 10
或NR_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
- 定義從
-16
到15
之間的值,決定程序的oom_score
。oom_score
愈高,程序就愈有可能被oom_killer
刪除。設定oom_adj
的值為-17
會取消oom_killer
對於該程序之功能。重要
任何調整過的程序之子程序,都會繼承父程序的oom_score
。舉例來說,如果一組sshd
程序不會被oom_killer
函式所終結,那麼所有由該組 SSH session 所啟動的程序也不會被終結。發生 OOM 時,這會影響oom_killer
函式挽救系統的能力。