Linux SWAP詳解

SWAP/swappiness/kswapd原理挤庇,swap分區(qū)優(yōu)先級的妙用

概述

本文討論的swap基于Linux4.4內(nèi)核代碼。Linux內(nèi)存管理是一套非常復雜的系統(tǒng)捆姜,而swap只是其中一個很小的處理邏輯炭臭。

希望本文能讓讀者了解Linux對swap的使用大概是什么樣子。閱讀完本文敌呈,應該可以幫你解決以下問題:

1贸宏、swap到底是干嘛的造寝?

2、swappiness到底是用來調(diào)節(jié)什么的吭练?

3诫龙、kswapd什么時候會進行swap操作?

4线脚、什么是內(nèi)存水位標記赐稽?

5、swap分區(qū)的優(yōu)先級(priority)有啥用浑侥?

1、什么是SWAP晰绎,到底是干嘛的寓落?

我們一般所說的swap,指的是一個交換分區(qū)或文件荞下。在Linux上可以使用swapon -s命令查看當前系統(tǒng)上正在使用的交換空間有哪些器净,以及相關信息:

從功能上講欣舵,交換分區(qū)主要是在內(nèi)存不夠用的時候,將部分內(nèi)存上的數(shù)據(jù)交換到swap空間上,以便讓系統(tǒng)不會因內(nèi)存不夠用而導致oom或者更致命的情況出現(xiàn)击罪。

所以,當內(nèi)存使用存在壓力礁凡,開始觸發(fā)內(nèi)存回收的行為時妒牙,就可能會使用swap空間。

內(nèi)核對swap的使用實際上是跟內(nèi)存回收行為緊密結合的迹淌。那么關于內(nèi)存回收和swap的關系河绽,我們需要思考以下幾個問題:

為什么要進行內(nèi)存回收?

哪些內(nèi)存可能會被回收呢唉窃?

回收的過程中什么時候會進行交換呢耙饰?

具體怎么交換?

下面我們就從這些問題出發(fā)纹份,一個一個進行分析苟跪。


內(nèi)核之所以要進行內(nèi)存回收的主要原因有兩個:

1、內(nèi)核需要為任何時刻突發(fā)到來的內(nèi)存申請?zhí)峁┳銐虻膬?nèi)存蔓涧,所以一般情況下保證有足夠的free空間對于內(nèi)核來說是必要的件已。

2、Linux內(nèi)核使用cache的策略雖然是不用白不用蠢笋,內(nèi)核會使用內(nèi)存中的page cache對部分文件進行緩存拨齐,以便提升文件的讀寫效率。所以內(nèi)核有必要設計一個周期性回收內(nèi)存的機制昨寞,以便cache的使用和其他相關內(nèi)存的使用不至于讓系統(tǒng)的剩余內(nèi)存長期處于很少的狀態(tài)瞻惋。

當真的有大于空閑內(nèi)存的申請到來的時候厦滤,會觸發(fā)強制內(nèi)存回收。

內(nèi)核在應對這兩類回收的需求分別實現(xiàn)了兩種不同的機制:

1歼狼、使用kswapd進程對內(nèi)存進行周期檢查掏导,以保證平常狀態(tài)下剩余內(nèi)存盡可能夠用。

2羽峰、直接內(nèi)存回收(directpagereclaim)趟咆,就是當內(nèi)存分配時沒有空閑內(nèi)存可以滿足要求時,觸發(fā)直接內(nèi)存回收梅屉。

這兩種內(nèi)存回收的觸發(fā)路徑不同:

1值纱、由內(nèi)核進程kswapd直接調(diào)用內(nèi)存回收的邏輯進行內(nèi)存回收。

參見mm/vmscan.c中的kswapd()主邏輯

2坯汤、內(nèi)存申請的時候進入slow path的內(nèi)存申請邏輯進行回收虐唠。

參見內(nèi)核代碼中的mm/page_alloc.c中的__alloc_pages_slowpath方法

這兩個方法中實際進行內(nèi)存回收的過程殊途同歸,最終都是調(diào)用shrink_zone()方法進行針對每個zone的內(nèi)存頁縮減惰聂。

這個方法中會再調(diào)用shrink_lruvec()這個方法對每個組織頁的鏈表進程檢查疆偿。找到這個線索之后,我們就可以清晰的看到內(nèi)存回收操作究竟針對的page有哪些了搓幌。

這些鏈表主要定義在mm/vmscan.c一個enum中:

根據(jù)這個enum可以看到杆故,內(nèi)存回收主要需要進行掃描的鏈表有如下4個:

anon的inactive

anon的active

file的inactive

file的active

就是說,內(nèi)存回收操作主要針對的就是內(nèi)存中的文件頁(file ?cache)和匿名頁溉愁。

關于活躍(active)還是不活躍(inactive)的判斷內(nèi)核會使用lru算法進行處理并進行標記处铛,我們這里不詳細解釋這個過程。

整個掃描的過程分幾個循環(huán):

1叉钥、掃描每個zone上的cgroup組罢缸;

2、以cgroup的內(nèi)存為單元進行page鏈表的掃描投队;

3枫疆、內(nèi)核會先掃描anon的active鏈表,將不頻繁的放進inactive鏈表中敷鸦,然后掃描inactive鏈表息楔,將里面活躍的移回active中;

4扒披、進行swap的時候值依,先對inactive的頁進行換出;

5碟案、如果是file的文件映射page頁愿险,則判斷其是否為臟數(shù)據(jù),如果是臟數(shù)據(jù)就寫回价说,不是臟數(shù)據(jù)可以直接釋放辆亏。

這樣看來风秤,內(nèi)存回收這個行為會對兩種內(nèi)存的使用進行回收:

1、anon的匿名頁內(nèi)存扮叨,主要回收手段是swap缤弦;

2、file-backed的文件映射頁彻磁,主要的釋放手段是寫回和清空碍沐。

因為針對filebased的內(nèi)存,沒必要進行交換衷蜓,其數(shù)據(jù)原本就在硬盤上累提,回收這部分內(nèi)存只要在有臟數(shù)據(jù)時寫回,并清空內(nèi)存就可以了恍箭,以后有需要再從對應的文件讀回來刻恭。

內(nèi)存對匿名頁和文件緩存一共用了四條鏈表進行組織,回收過程主要是針對這四條鏈表進行掃描和操作扯夭。

2、swappiness到底是用來調(diào)節(jié)什么的鞍匾?

很多人應該都知道/proc/sys/vm/swappiness這個文件交洗,是個可以用來調(diào)整跟swap相關的參數(shù)。這個文件的默認值是60橡淑,可以的取值范圍是0-100构拳。

這很容易給大家一個暗示:我是個百分比哦!

那么這個文件具體到底代表什么意思呢梁棠?我們先來看一下說明:

======

swappiness

This control is used to define how aggressive the kernel will swap memory pages. Higher values will increase agressiveness, lower values decrease the amount of swap.

A value of 0 instructs the kernel not to initiate swap until the amount of free and file-backed pages is less than the high water mark in a zone.

The default value is 60.

======

這個文件的值用來定義內(nèi)核使用swap的積極程度:

值越高置森,內(nèi)核就會越積極的使用swap;

值越低符糊,就會降低對swap的使用積極性凫海。

如果這個值為0,那么內(nèi)存在free和file-backed使用的頁面總量小于高水位標記(high water mark)之前男娄,不會發(fā)生交換行贪。

在這里我們可以理解file-backed這個詞的含義了,實際上就是上文所說的文件映射頁的大小模闲。

那么這個swappiness到底起到了什么作用呢建瘫?

我們換個思路考慮這個事情。假設讓我們設計一個內(nèi)存回收機制尸折,要去考慮將一部分內(nèi)存寫到swap分區(qū)上啰脚,將一部分file-backed的內(nèi)存寫回并清空,剩余部分內(nèi)存出來实夹,我們將怎么設計橄浓?

我想應該主要考慮這樣幾個問題:

如果回收內(nèi)存可以有兩種途徑(匿名頁交換和file緩存清空)粒梦,那么我應該考慮在本次回收的時候,什么情況下多進行file寫回贮配,什么情況下應該多進行swap交換谍倦。說白了就是平衡兩種回收手段的使用,以達到最優(yōu)泪勒。

如果符合交換條件的內(nèi)存較長昼蛀,是不是可以不用全部交換出去?比如可以交換的內(nèi)存有100M圆存,但是目前只需要50M內(nèi)存叼旋,實際只要交換50M就可以了,不用把能交換的都交換出去沦辙。

分析代碼會發(fā)現(xiàn)夫植,Linux內(nèi)核對這部分邏輯的實現(xiàn)代碼在get_scan_count()這個方法中,這個方法被shrink_lruvec()調(diào)用油讯。

get_sacn_count()就是處理上述邏輯的详民,swappiness是它所需要的一個參數(shù),這個參數(shù)實際上是指導內(nèi)核在清空內(nèi)存的時候陌兑,是更傾向于清空file-backed內(nèi)存還是更傾向于進行匿名頁的交換的沈跨。

當然,這只是個傾向性兔综,是指在兩個都夠用的情況下饿凛,更愿意用哪個,如果不夠用了软驰,那么該交換還是要交換涧窒。

簡單看一下get_sacn_count()函數(shù)的處理部分代碼,其中關于swappiness的第一個處理是:

這里注釋的很清楚:

如果swappiness設置為100锭亏,那么匿名頁和文件將用同樣的優(yōu)先級進行回收纠吴。

很明顯,使用清空文件的方式將有利于減輕內(nèi)存回收時可能造成的IO壓力贰镣。

因為如果file-backed中的數(shù)據(jù)不是臟數(shù)據(jù)的話呜象,那么可以不用寫回,這樣就沒有IO發(fā)生碑隆,而一旦進行交換恭陡,就一定會造成IO。

所以系統(tǒng)默認將swappiness的值設置為60上煤,這樣回收內(nèi)存時休玩,對file-backed的文件cache內(nèi)存的清空比例會更大,內(nèi)核將會更傾向于進行緩存清空而不是交換。

這里的swappiness值如果是60拴疤,那么是不是說內(nèi)核回收的時候永部,會按照60:140的比例去做相應的swap和清空file-backed的空間呢?并不是呐矾。

在做這個比例計算的時候苔埋,內(nèi)核還要參考當前內(nèi)存使用的其他信息。對這里具體是怎么處理感興趣的人蜒犯,可以自己詳細看get_sacn_count()的實現(xiàn)组橄,本文就不多解釋了。

我們在此要明確的概念是:?swappiness的值是用來控制內(nèi)存回收時罚随,回收的匿名頁更多一些還是回收的file cache更多一些?玉工。

swappiness設置為0的話,是不是內(nèi)核就根本不會進行swap了呢淘菩?這個答案也是否定的遵班。

首先是內(nèi)存真的不夠用的時候,該swap的話還是要swap潮改。

其次在內(nèi)核中還有一個邏輯會導致直接使用swap狭郑,內(nèi)核代碼是這樣處理的:

這里的邏輯是說,如果觸發(fā)的是全局回收汇在,并且zonefile + zonefree <= high_wmark_pages(zone)條件成立時愿阐,就將scan_balance這個標記置為SCAN_ANON。

后續(xù)處理scan_balance的時候趾疚,如果它的值是SCAN_ANON,則一定會進行針對匿名頁的swap操作以蕴。

要理解這個行為糙麦,我們首先要搞清楚什么是高水位標記(high_wmark_pages)。

3丛肮、kswapd什么時候會進行swap操作赡磅?

我們回到kswapd周期檢查和直接內(nèi)存回收的兩種內(nèi)存回收機制。

直接內(nèi)存回收比較好理解宝与,當申請的內(nèi)存大于剩余內(nèi)存的時候焚廊,就會觸發(fā)直接回收。

那么kswapd進程在周期檢查的時候觸發(fā)回收的條件是什么呢习劫?

還是從設計角度來看咆瘟,kswapd進程要周期對內(nèi)存進行檢測,達到一定閾值的時候開始進行內(nèi)存回收诽里。

這個所謂的閾值可以理解為內(nèi)存目前的使用壓力袒餐,就是說,雖然我們還有剩余內(nèi)存,但是當剩余內(nèi)存比較小的時候灸眼,就是內(nèi)存壓力較大的時候卧檐,就應該開始試圖回收些內(nèi)存了,這樣才能保證系統(tǒng)盡可能的有足夠的內(nèi)存給突發(fā)的內(nèi)存申請所使用焰宣。

4霉囚、什么是內(nèi)存水位標記?(watermark)

那么如何描述內(nèi)存使用的壓力呢匕积?

Linux內(nèi)核使用水位標記(watermark)的概念來描述這個壓力情況盈罐。

Linux為內(nèi)存的使用設置了三種內(nèi)存水位標記:high、low闸天、min暖呕。他們所標記的含義分別為:

剩余內(nèi)存在high以上表示內(nèi)存剩余較多,目前內(nèi)存使用壓力不大苞氮;

high-low的范圍表示目前剩余內(nèi)存存在一定壓力湾揽;

low-min表示內(nèi)存開始有較大使用壓力,剩余內(nèi)存不多了笼吟;

min是最小的水位標記库物,當剩余內(nèi)存達到這個狀態(tài)時,就說明內(nèi)存面臨很大壓力贷帮。

小于min這部分內(nèi)存戚揭,內(nèi)核是保留給特定情況下使用的,一般不會分配撵枢。

內(nèi)存回收行為就是基于剩余內(nèi)存的水位標記進行決策的:

當系統(tǒng)剩余內(nèi)存低于watermark[low]的時候民晒,內(nèi)核的kswapd開始起作用,進行內(nèi)存回收锄禽。直到剩余內(nèi)存達到watermark[high]的時候停止潜必。

如果內(nèi)存消耗導致剩余內(nèi)存達到了或超過了watermark[min]時,就會觸發(fā)直接回收(direct reclaim)沃但。

明白了水位標記的概念之后磁滚,zonefile + zonefree <= high_wmark_pages(zone)這個公式就能理解了。

這里的zonefile相當于內(nèi)存中文件映射的總量宵晚,zonefree相當于剩余內(nèi)存的總量垂攘。

內(nèi)核一般認為,如果zonefile還有的話淤刃,就可以盡量通過清空文件緩存獲得部分內(nèi)存晒他,而不必只使用swap方式對anon的內(nèi)存進行交換。

整個判斷的概念是說钝凶,在全局回收的狀態(tài)下(有global_reclaim(sc)標記)仪芒,如果當前的文件映射內(nèi)存總量+剩余內(nèi)存總量的值評估小于等于watermark[high]標記的時候唁影,就可以進行直接swap了。

這樣是為了防止進入cache陷阱掂名,具體描述可以見代碼注釋据沈。

這個判斷對系統(tǒng)的影響是,?swappiness設置為0時饺蔑,有剩余內(nèi)存的情況下也可能發(fā)生交換锌介。

那么watermark相關值是如何計算的呢?

所有的內(nèi)存watermark標記都是根據(jù)當前內(nèi)存總大小和一個可調(diào)參數(shù)進行運算得來的猾警,這個參數(shù)是:/proc/sys/vm/min_free_kbytes

首先這個參數(shù)本身決定了系統(tǒng)中每個zone的watermark[min]的值大小孔祸。

然后內(nèi)核根據(jù)min的大小并參考每個zone的內(nèi)存大小分別算出每個zone的low水位和high水位值。

想了解具體邏輯可以參見源代碼目錄下的該文件:

mm/page_alloc.c

在系統(tǒng)中可以從/proc/zoneinfo文件中查看當前系統(tǒng)的相關的信息和使用情況发皿。

我們會發(fā)現(xiàn)以上內(nèi)存管理的相關邏輯都是以zone為單位的崔慧,這里zone的含義是指內(nèi)存的分區(qū)管理。

Linux將內(nèi)存分成多個區(qū)穴墅,主要有:

直接訪問區(qū)(DMA)

一般區(qū)(Normal)

高端內(nèi)存區(qū)(HighMemory)

內(nèi)核對內(nèi)存不同區(qū)域的訪問因為硬件結構因素會有尋址和效率上的差別惶室。如果在NUMA架構上,不同CPU所管理的內(nèi)存也是不同的zone玄货。

相關參數(shù)設置

zone_reclaim_mode:

zone_reclaim_mode模式是在2.6版本后期開始加入內(nèi)核的一種模式皇钞,可以用來管理當一個內(nèi)存區(qū)域(zone)內(nèi)部的內(nèi)存耗盡時,是從其內(nèi)部進行內(nèi)存回收還是可以從其他zone進行回收的選項松捉,我們可以通過/proc/sys/vm/zone_reclaim_mode文件對這個參數(shù)進行調(diào)整夹界。

在申請內(nèi)存時(內(nèi)核的get_page_from_freelist()方法中),內(nèi)核在當前zone內(nèi)沒有足夠內(nèi)存可用的情況下隘世,會根據(jù)zone_reclaim_mode的設置來決策是從下一個zone找空閑內(nèi)存還是在zone內(nèi)部進行回收可柿。這個值為0時表示可以從下一個zone找可用內(nèi)存,非0表示在本地回收丙者。

這個文件可以設置的值及其含義如下:

echo 0 > /proc/sys/vm/zone_reclaim_mode:意味著關閉zone_reclaim模式趾痘,可以從其他zone或NUMA節(jié)點回收內(nèi)存。

echo 1 > /proc/sys/vm/zone_reclaim_mode:表示打開zone_reclaim模式蔓钟,這樣內(nèi)存回收只會發(fā)生在本地節(jié)點內(nèi)。

echo 2 > /proc/sys/vm/zone_reclaim_mode:在本地回收內(nèi)存時卵贱,可以將cache中的臟數(shù)據(jù)寫回硬盤滥沫,以回收內(nèi)存。

echo 4 > /proc/sys/vm/zone_reclaim_mode:可以用swap方式回收內(nèi)存键俱。

不同的參數(shù)配置會在NUMA環(huán)境中對其他內(nèi)存節(jié)點的內(nèi)存使用產(chǎn)生不同的影響兰绣,大家可以根據(jù)自己的情況進行設置以優(yōu)化你的應用。

默認情況下编振,zone_reclaim模式是關閉的缀辩。這在很多應用場景下可以提高效率,比如文件服務器,或者依賴內(nèi)存中cache比較多的應用場景臀玄。

這樣的場景對內(nèi)存cache速度的依賴要高于進程進程本身對內(nèi)存速度的依賴瓢阴,所以我們寧可讓內(nèi)存從其他zone申請使用,也不愿意清本地cache健无。

如果確定應用場景是內(nèi)存需求大于緩存荣恐,而且盡量要避免內(nèi)存訪問跨越NUMA節(jié)點造成的性能下降的話,則可以打開zone_reclaim模式累贤。

此時頁分配器會優(yōu)先回收容易回收的可回收內(nèi)存(主要是當前不用的page cache頁)叠穆,然后再回收其他內(nèi)存。

打開本地回收模式的寫回可能會引發(fā)其他內(nèi)存節(jié)點上的大量的臟數(shù)據(jù)寫回處理臼膏。如果一個內(nèi)存zone已經(jīng)滿了硼被,那么臟數(shù)據(jù)的寫回也會導致進程處理速度收到影響,產(chǎn)生處理瓶頸渗磅。

這會降低某個內(nèi)存節(jié)點相關的進程的性能嚷硫,因為進程不再能夠使用其他節(jié)點上的內(nèi)存。但是會增加節(jié)點之間的隔離性夺溢,其他節(jié)點的相關進程運行將不會因為另一個節(jié)點上的內(nèi)存回收導致性能下降论巍。

除非針對本地節(jié)點的內(nèi)存限制策略或者cpuset配置有變化,對swap的限制會有效約束交換只發(fā)生在本地內(nèi)存節(jié)點所管理的區(qū)域上风响。

min_unmapped_ratio:

這個參數(shù)只在NUMA架構的內(nèi)核上生效嘉汰。這個值表示NUMA上每個內(nèi)存區(qū)域的pages總數(shù)的百分比。

在zone_reclaim_mode模式下状勤,只有當相關區(qū)域的內(nèi)存使用達到這個百分比鞋怀,才會發(fā)生區(qū)域內(nèi)存回收。

在zone_reclaim_mode設置為4的時候持搜,內(nèi)核會比較所有的file-backed和匿名映射頁密似,包括swapcache占用的頁以及tmpfs文件的總內(nèi)存使用是否超過這個百分比。

其他設置的情況下葫盼,只比較基于一般文件的未映射頁残腌,不考慮其他相關頁。

page-cluster:

page-cluster是用來控制從swap空間換入數(shù)據(jù)的時候贫导,一次連續(xù)讀取的頁數(shù)抛猫,這相當于對交換空間的預讀。這里的連續(xù)是指在swap空間上的連續(xù)孩灯,而不是在內(nèi)存地址上的連續(xù)闺金。

因為swap空間一般是在硬盤上,對硬盤設備的連續(xù)讀取將減少磁頭的尋址峰档,提高讀取效率败匹。

這個文件中設置的值是2的指數(shù)寨昙。就是說,如果設置為0掀亩,預讀的swap頁數(shù)是2的0次方舔哪,等于1頁。如果設置為3归榕,就是2的3次方尸红,等于8頁。

同時刹泄,設置為0也意味著關閉預讀功能外里。文件默認值為3。我們可以根據(jù)我們的系統(tǒng)負載狀態(tài)來設置預讀的頁數(shù)大小特石。

swap的相關操縱命令

可以使用mkswap將一個分區(qū)或者文件創(chuàng)建成swap空間盅蝗。swapon可以查看當前的swap空間和啟用一個swap分區(qū)或者文件。swapoff可以關閉swap空間姆蘸。

我們使用一個文件的例子來演示一下整個操作過程:

制作swap文件:

啟用swap文件:

關閉swap空間:

5墩莫、swap分區(qū)的優(yōu)先級(priority)有啥用?

在使用多個swap分區(qū)或者文件的時候逞敷,還有一個優(yōu)先級的概念(Priority)狂秦。

在swapon的時候,我們可以使用-p參數(shù)指定相關swap空間的優(yōu)先級推捐,值越大優(yōu)先級越高裂问,可以指定的數(shù)字范圍是-1到32767。

內(nèi)核在使用swap空間的時候總是先使用優(yōu)先級高的空間牛柒,后使用優(yōu)先級低的堪簿。

當然如果把多個swap空間的優(yōu)先級設置成一樣的,那么兩個swap空間將會以輪詢方式并行進行使用皮壁。

如果兩個swap放在兩個不同的硬盤上椭更,相同的優(yōu)先級可以起到類似RAID0的效果,增大swap的讀寫效率蛾魄。

另外虑瀑,編程時使用mlock()也可以將指定的內(nèi)存標記為不會換出,具體幫助可以參考man 2 mlock滴须。

最后

關于swap的使用建議缴川,針對不同負載狀態(tài)的系統(tǒng)是不一樣的。有時我們希望swap大一些描馅,可以在內(nèi)存不夠用的時候不至于觸發(fā)oom-killer導致某些關鍵進程被殺掉,比如數(shù)據(jù)庫業(yè)務而线。

也有時候我們希望不要swap铭污,因為當大量進程爆發(fā)增長導致內(nèi)存爆掉之后恋日,會因為swap導致IO跑死,整個系統(tǒng)都卡住嘹狞,無法登錄岂膳,無法處理。

這時候我們就希望不要swap磅网,即使出現(xiàn)oom-killer也造成不了太大影響谈截,但是不能允許服務器因為IO卡死像多米諾骨牌一樣全部死機,而且無法登陸涧偷。跑cpu運算的無狀態(tài)的apache就是類似這樣的進程池架構的程序簸喂。


swap到底怎么用?

要還是不要?

設置大還是辛浅薄喻鳄?

相關參數(shù)應該如何配置?

是要根據(jù)我們自己的生產(chǎn)環(huán)境的情況而定的确封。

閱讀完本文后希望大家可以明白一些swap的深層次知識除呵。

Q&A:

一個內(nèi)存剩余還比較大的系統(tǒng)中,是否有可能使用swap爪喘?

A: 有可能颜曾,如果運行中的某個階段出發(fā)了這個條件”zonefile+zonefree<=high_wmark_pages(zone)“,就可能會swap秉剑。

swappiness設置為0就相當于關閉swap么泛豪?

A: 不是的,關閉swap要使用swapoff命令秃症。swappiness只是在內(nèi)存發(fā)生回收操作的時候用來平衡cache回收和swap交換的一個參數(shù)候址,調(diào)整為0意味著,盡量通過清緩存來回收內(nèi)存种柑。

A: swappiness設置為100代表系統(tǒng)會盡量少用剩余內(nèi)存而多使用swap么岗仑?

不是的,這個值設置為100表示內(nèi)存發(fā)生回收時聚请,從cache回收內(nèi)存和swap交換的優(yōu)先級一樣荠雕。就是說,如果目前需求100M內(nèi)存驶赏,那么較大機率會從cache中清除50M內(nèi)存炸卑,再將匿名頁換出50M,把回收到的內(nèi)存給應用程序使用煤傍。但是這還要看cache中是否能有空間盖文,以及swap是否可以交換50m。內(nèi)核只是試圖對它們平衡一些而已蚯姆。

kswapd進程什么時候開始內(nèi)存回收五续?

A: kswapd根據(jù)內(nèi)存水位標記決定是否開始回收內(nèi)存洒敏,如果標記達到low就開始回收,回收到剩余內(nèi)存達到high標記為止疙驾。

如何查看當前系統(tǒng)的內(nèi)存水位標記凶伙?

A: cat /proc/zoneinfo。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末它碎,一起剝皮案震驚了整個濱河市函荣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌扳肛,老刑警劉巖傻挂,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異敞峭,居然都是意外死亡踊谋,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門旋讹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來殖蚕,“玉大人,你說我怎么就攤上這事沉迹∧酪撸” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵鞭呕,是天一觀的道長蛤育。 經(jīng)常有香客問我,道長葫松,這世上最難降的妖魔是什么瓦糕? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮腋么,結果婚禮上咕娄,老公的妹妹穿的比我還像新娘。我一直安慰自己珊擂,他們只是感情好圣勒,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著摧扇,像睡著了一般圣贸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上扛稽,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天吁峻,我揣著相機與錄音,去河邊找鬼。 笑死用含,一個胖子當著我的面吹牛橙困,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播耕餐,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼辟狈!你這毒婦竟也來了肠缔?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤哼转,失蹤者是張志新(化名)和其女友劉穎明未,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體壹蔓,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡趟妥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了佣蓉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片披摄。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖勇凭,靈堂內(nèi)的尸體忽然破棺而出疚膊,到底是詐尸還是另有隱情,我是刑警寧澤虾标,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布寓盗,位于F島的核電站,受9級特大地震影響璧函,放射性物質發(fā)生泄漏傀蚌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一蘸吓、第九天 我趴在偏房一處隱蔽的房頂上張望善炫。 院中可真熱鬧,春花似錦美澳、人聲如沸销部。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽洪规。三九已至靶草,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間擂涛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留撒妈,地道東北人恢暖。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像狰右,于是被迫代替她去往敵國和親杰捂。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容