(1)避免使用 swap 分區(qū)
swap 分區(qū)指的系統(tǒng)的物理內(nèi)存不夠用的時(shí)候,把物理內(nèi)存中的一部分空間釋放 出來,以供當(dāng)前運(yùn)行的程序使用奶甘。
通過 vm.swappiness 參數(shù)控制,值閾為 0 ~ 100,值越高說明操作系統(tǒng)內(nèi)核更積極 的將應(yīng)用程序的數(shù)據(jù)交換到磁盤糊肠。
將 Hadoop 守護(hù)進(jìn)程的數(shù)據(jù)交換到磁盤是很危險(xiǎn)的,有可能導(dǎo)致操作超時(shí),所以 一般將改值設(shè)為? 0 厢蒜。
(2)內(nèi)存分配策略
vm.overcommit_memory 的值決定分配策略猬错,值通常為 0, 1 和 2?
0 ? 表示內(nèi)核將檢查是否有足夠的可用內(nèi)存供應(yīng)用進(jìn)程使用;如果有足夠的可用內(nèi)存潘鲫,內(nèi)存申請?jiān)试S礁苗;否則,內(nèi)存申請失敗级解,并把錯誤返回給應(yīng)用進(jìn)程
1 ? 表示內(nèi)核允許分配所有的物理內(nèi)存冒黑,而不管當(dāng)前的內(nèi)存狀態(tài)如何。
2? 表示內(nèi)核允許分配超過所有物理內(nèi)存和交換空間總和的內(nèi)存,并且通過 vm.overcommit_ratio 的值設(shè)置超過的比例, 50 表示超過物理內(nèi)存 50%
建議 vm.overcommit_memory 設(shè)置為 2 ,并調(diào)整 vm.overcommit_ratio
修改 vm.overcommit_memory 的三種方式?
1. 編輯/etc/sysctl.conf勤哗,增加一行 vm.overcommit_memory = 2 ,然后 sysctl -p 使配置文件生效
2. sysctl vm.overcommit_memory = 2
3. echo 2 > /proc/sys/vm/overcommit_memory?
(3)修改 net.core.somaxconn 參數(shù)
net.core.somaxconn 是 Linux 中的一個(gè)內(nèi)核(kernel) 參數(shù)抡爹,表示 socket 監(jiān) 聽的 backlog 上限。
backlog 是 socket 的監(jiān)聽隊(duì)列,當(dāng)一個(gè)請求尚未被處理或建立時(shí),會進(jìn)入 backlog芒划。
而 socket server 可以一次性處理 backlog 中的所有請求,處理后的請求不再 位于監(jiān)聽隊(duì)列中冬竟。
當(dāng) server 處理請求較慢,以至于監(jiān)聽隊(duì)列被填滿后,新來的請求會被拒絕。
修改 net.core.somaxconn 的三種方式:?
1.編輯/etc/sysctl.conf, 增加一行 net.core.somaxconn = 32768 ,然后 sysctl -p 使配置文件生效
2.sysctl -w net.core.somaxconn = 32768
3.echo 32768 >/proc/sys/net/core/somaxconn?
注意
在 core-default.xml 中參數(shù) ipc.server.listen.queue.size 控制 socket server 的監(jiān)聽隊(duì)列長度,即 backlog 長度,默認(rèn)為 128民逼。而 Linux的參數(shù) net.core.somaxconn 默認(rèn)也為 128 ,當(dāng)服務(wù)端(NameNode 或 ResourceManager)繁忙時(shí), 128 是遠(yuǎn)遠(yuǎn)不夠的,這樣需要調(diào)大 backlog泵殴, 建議為大于等于 32768, 并修改 Hadoop 的 ipc.server.listen.queue.size 的 參數(shù)
(4)增大同時(shí)打開文件描述符的上限
(5)禁用文件的訪問時(shí)間
(6)關(guān)閉 THP
THP (Transparent Huge Pages)是管理 Huge Pages 自動化的抽象層, 而 Huge Pages 是大小為 2MB ~ 1GB
的內(nèi)存頁。 在運(yùn)行 Hadoop 作業(yè)時(shí), THP 會引起 CPU 占用率偏高,故需要將其關(guān)閉拼苍。