linux可用內(nèi)存足夠?yàn)槭裁催€用swap

討論這個(gè)問題前,我們先來看當(dāng)前系統(tǒng)狀態(tài):

1[root@localhost ~]# free -m

2 ? ? ? ? ? ? ?total ? ? ? ?used ? ? ? ?free ? ? ?shared ?buff/cache ? available

3Mem: ? ? ? ? ?31768 ? ? ? ?9809 ? ? ? ? 363 ? ? ? ?9601 ? ? ? 21595 ? ? ? 11838

4Swap: ? ? ? ? ?8191 ? ? ? ?8191 ? ? ? ? ? 0

為什么?buffer/cache?會(huì)占用這么多的內(nèi)存?

buffer/cache使用過高通常是程序頻繁存取文件后,物理內(nèi)存會(huì)很快被用光。

當(dāng)程序結(jié)束后,內(nèi)存不會(huì)被正常釋放,而是成為cache狀態(tài).

通常我們不需要手工釋放swap,Linux會(huì)自動(dòng)管理.

如果非要釋放,請(qǐng)繼續(xù)看.

如何釋放占用的swap呢?

1## 將內(nèi)存緩沖區(qū)數(shù)據(jù)立刻同步到磁盤

2[root@localhost ~]# sync

3## 關(guān)閉所有的swap

4[root@localhost ~]# swapoff -a

5## 啟用所有swap

6[root@localhost ~]# swapon -a

7[root@localhost ~]# free -m

8 ? ? ? ? ? ? ?total ? ? ? ?used ? ? ? ?free ? ? ?shared ?buff/cache ? available

9Mem: ? ? ? ? ?31768 ? ? ? 10853 ? ? ? ? 217 ? ? ? 16740 ? ? ? 20698 ? ? ? ?3658

10Swap: ? ? ? ? ?8191 ? ? ? ? ? 0 ? ? ? ?8191

那么回到最初的問題:

linux可用內(nèi)存足夠?yàn)槭裁催€用swap?

上面可以看到服務(wù)器共有32G內(nèi)存,其中buff/cache占用了21G+.

明明還有可以將近12G的內(nèi)存可以使用.但系統(tǒng)卻偏偏占用完了swap的8G內(nèi)存.

可知系統(tǒng)并沒有自動(dòng)釋放buff/cache最大化利用內(nèi)存.

原因:

內(nèi)核參數(shù) swappiness 的值的大小,決定著linux何時(shí)開始使用swap。

swappiness=0?時(shí)表示盡最大可能的使用物理內(nèi)存以避免換入到swap.

swappiness=100?時(shí)候表示最大限度使用swap分區(qū),并且把內(nèi)存上的數(shù)據(jù)及時(shí)的換出到swap空間里面.

此值linux的基本默認(rèn)設(shè)置為60,不同發(fā)行版可能略微不同.

查看命令具體如下:

1[root@localhost ~]# cat /proc/sys/vm/swappiness

260

什么意思呢?

就是說,你的內(nèi)存在使用率到40%(100%-60%)的時(shí)候,系統(tǒng)就會(huì)開始出現(xiàn)有交換分區(qū)的使用。

大家知道,內(nèi)存的速度會(huì)比磁盤快很多,這樣子會(huì)加大系統(tǒng)io,同時(shí)造的成大量頁的換進(jìn)換出,嚴(yán)重影響系統(tǒng)的性能,所以我們?cè)诓僮飨到y(tǒng)層面,要盡可能使用內(nèi)存,對(duì)該參數(shù)進(jìn)行調(diào)整。

調(diào)整值

1[root@localhost ~]# sysctl vm.swappiness=10

2vm.swappiness = 10

3[root@localhost ~]# cat /proc/sys/vm/swappiness

410

重啟依舊生效,需要在/etc/sysctl.conf修改:

1[root@localhost ~]# cat /etc/sysctl.conf

2vm.swappiness = 10

3[root@localhost ~]# sysctl -p

題外話

通常我們還經(jīng)常看到shared占用大量內(nèi)存,shared表示共享內(nèi)存的占用,

起決定參數(shù)的兩個(gè)分別是:

1# 定義單個(gè)共享內(nèi)存段的最大值

2kernel.shmmax = 68719476736 ?

3

4# 定義共享內(nèi)存頁數(shù)

5kernel.shmall = 4194304 ?##(16G)

當(dāng)前系統(tǒng)內(nèi)存頁大小查看:

1[root@localhost ~]# getconf ?PAGESIZE

24096

當(dāng)前系統(tǒng)共享內(nèi)存段大小(bytes):

1[root@localhost ~]# cat /proc/sys/kernel/shmmax

216777216000

共享內(nèi)存段個(gè)數(shù)查看:

1[root@localhost ~]# ipcs -m

內(nèi)存頁和內(nèi)存段是兩種不同的內(nèi)存管理方式,詳細(xì)了解可以自行谷歌.

學(xué)習(xí)安排上!

?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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