【性能】為什么大部分應(yīng)用的運(yùn)行都建議關(guān) swap?

為什么kubernetes要關(guān)閉swap呢?

一個(gè)是性能問(wèn)題,開(kāi)啟swap會(huì)嚴(yán)重影響性能(包括內(nèi)存和I/O);

另一個(gè)是管理問(wèn)題,開(kāi)啟swap后通過(guò)cgroups設(shè)置的內(nèi)存上限就會(huì)失效。

有的時(shí)候可用內(nèi)存很多也會(huì)swap,這時(shí)候關(guān)閉是為了避免swap帶來(lái)的性能問(wèn)題。


# cat /proc/zoneinfo

# cat /proc/sys/vm/min_free_kbytes

# cat /proc/sys/vm/swappiness


hadoop集群服務(wù)器一般是建議關(guān)閉swap交換空間,這樣可提高性能。在什么情況下開(kāi)swap、什么情況下關(guān)swap?

為了性能關(guān)閉swap,這樣就不會(huì)交換也不會(huì)慢了。內(nèi)核里有個(gè)vm.xx的值可以調(diào)節(jié)swap和內(nèi)存的比例,在使用內(nèi)存90%時(shí)才交換到swap,可以設(shè)置這個(gè)來(lái)保持性能。在內(nèi)存比較少的時(shí)候,還可以交換,就好了。

不僅 hadoop,包括 ES 在內(nèi)絕大部分 Java 的應(yīng)用都建議關(guān) swap,這個(gè)和 JVM 的 gc 有關(guān),它在 gc 的時(shí)候會(huì)遍歷所有用到的堆的內(nèi)存,如果這部分內(nèi)存是被 swap 出去了,遍歷的時(shí)候就會(huì)有磁盤(pán)IO。


關(guān)于設(shè)置 wappiness=0

Kernel version 3.5 and newer: disables swapiness.

Kernel version older than 3.5: avoids swapping processes out of physical memory for as long as possible.

如果Linux內(nèi)核是3.5及以后的,最好是設(shè)置swappiness=10,不要設(shè)置swappiness=0


swap應(yīng)該是針對(duì)以前內(nèi)存小的一種優(yōu)化,不過(guò)現(xiàn)在內(nèi)存沒(méi)那么昂貴之后,所以就沒(méi)那么大的必要開(kāi)啟了。

numa感覺(jué)是對(duì)系統(tǒng)資源做的隔離分區(qū),不過(guò)目前虛擬化和docker這么流行,而且node與node之間訪問(wèn)更耗時(shí),針對(duì)大程序不一定啟到了優(yōu)化作用,針對(duì)小程序,也沒(méi)有太大必要。所以numa也沒(méi)必要開(kāi)啟。


在工作中經(jīng)常會(huì)遇到這種情況,系統(tǒng)中的剩余內(nèi)存較小、緩存內(nèi)存較大的,也就是整體可用內(nèi)存較高的情況下,就開(kāi)始使用swap了。

這是容易誤解的地方,其實(shí),即使把swappiness設(shè)置成0也不會(huì)禁止swap。想要禁止,就不要開(kāi)啟swap。


公司處理嵌入式系統(tǒng)都是關(guān)閉swap分區(qū),一般是為了減少寫(xiě)的次數(shù),延長(zhǎng)Flash存儲(chǔ)的壽命。


電腦的休眠是基于swap.如果系統(tǒng)沒(méi)有分配swap分區(qū),還會(huì)將內(nèi)存數(shù)據(jù)寫(xiě)入磁盤(pán)嗎?

除了分區(qū)之外,也可以用文件,Linux 本身支持兩種類型的 Swap,即 Swap 分區(qū)和 Swap 文件。




參考


為什么系統(tǒng)的Swap變高了?

https://time.geekbang.org/column/article/75797


Just say no to swapping

https://dzone.com/articles/just-say-no-swapping


Disable swapping

https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-configuration-memory.html


Why not set swappiness to zero?

https://community.cloudera.com/t5/Support-Questions/Why-not-set-swappiness-to-zero/m-p/149228


Configuring system settings for memory

https://www.elastic.co/guide/en/elasticsearch/reference/current/setting-system-settings.html#systemd

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容