0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在Linux上使用和不使用交換空間的區(qū)別

CHANBAEK ? 來源:myfreax ? 作者:myfreax ? 2022-12-05 16:59 ? 次閱讀

我們知道Linux內(nèi)核使用交換空間而不是RAM內(nèi)存的時(shí)候會(huì)嚴(yán)重降低性能。那么,有人可能會(huì)問,既然我有足夠多的可用內(nèi)存,刪除交換空間不是更好嗎?

簡短的回答是不會(huì)。反而啟用交換空間會(huì)帶來性能優(yōu)勢。即使您的Linux服務(wù)器有足夠多的可用內(nèi)存,您也會(huì)經(jīng)常發(fā)現(xiàn)Linux服務(wù)器長時(shí)間運(yùn)行后會(huì)使用交換空間。

在本教程中,我們將說明為什么你應(yīng)該添加交換空間swap,使用swap交換空間的優(yōu)點(diǎn),在不使用交換空間時(shí)將有那些區(qū)別與缺點(diǎn)。

如何在內(nèi)存和交換空間使用上作出取舍,理解頻繁使用交換空間帶來的性能影響。

如何配置vfs_cache_pressure與swappiness值,應(yīng)優(yōu)先調(diào)整內(nèi)存回收速度,如何確定頻繁使用交換空間。

交換空間是否降低Linux性能

請查看以下數(shù)據(jù),該數(shù)據(jù)是從運(yùn)行一個(gè)月后的實(shí)時(shí)聊天服務(wù)器獲取的。以下數(shù)據(jù)來自free命令的結(jié)果。

total        used        free      shared  buff/cache   available
Mem:           3.7G        1.0G        445M         84M        2.2G        2.2G
Swap:          1.8G        308M        1.5G

free -h

這里的數(shù)據(jù)顯示使用了308M的交換空間。當(dāng)我運(yùn)行swapping檢查時(shí),沒有跡象表明進(jìn)行或不合時(shí)宜使用交互空間I/O的活動(dòng)。

除此之外kswap服務(wù)并沒有消耗太多CPU時(shí)間。使用top命令按CPU時(shí)間排序的查找頂級(jí)進(jìn)程中也找不到kswap進(jìn)程。

為了確認(rèn)kswap進(jìn)程是否繁忙。我們還使用了ps命令并通過grep過濾輸出來確認(rèn)。

所以在這種情況下,swap使用不會(huì)降低Linux服務(wù)器的性能?,F(xiàn)在,讓我們看看交換空間實(shí)際上如何改善Linux服務(wù)器性能。

ps -A | grep kswap
40 ? 00:00:29 kswapd0

使用swap交換空間的優(yōu)點(diǎn)

Linux系統(tǒng)使用一些swap是正常的事,也是一件好事。Linux內(nèi)核會(huì)將幾乎從未使用過的內(nèi)存頁面移動(dòng)到交換空間中,以確保內(nèi)存為更頻繁使用內(nèi)存頁面的進(jìn)程提供更多可用的緩存空間。

當(dāng)內(nèi)核被迫不斷地將內(nèi)存頁面移入和移出內(nèi)存和交換空間swap時(shí),交換空間使用會(huì)成為一個(gè)性能問題。

另一個(gè)優(yōu)點(diǎn)是交換空間swap讓管理員有時(shí)間對低內(nèi)存問題做出反應(yīng)。我們經(jīng)常會(huì)注意到服務(wù)器運(yùn)行緩慢,并且在登錄時(shí)會(huì)注意到大量使用交換空間。如果沒有交換空間,內(nèi)存不足會(huì)產(chǎn)生更加突然和嚴(yán)重的連鎖反應(yīng)。

所以我們會(huì)建議將交換空間設(shè)置為您最大進(jìn)程的大小。比如mysql在my.cnf中配置的內(nèi)存。

有些人建議不要使用交換空間或交換空間大小略大于總內(nèi)存。如果您能為此提出正當(dāng)理由,那么這可能是您的選擇。

但是,這在服務(wù)器上幾乎不是這種情況,您應(yīng)該在交換空間對您的應(yīng)用程序的影響之間取得平衡。交換空間不會(huì)改變服務(wù)器所需的內(nèi)存總量。它旨在改善系統(tǒng)的性能。

總的來說,即使仍有足夠多可用的內(nèi)存RAM,Linux內(nèi)核也會(huì)將幾乎從未使用過的內(nèi)存頁面移動(dòng)到交換空間。

換出一段時(shí)間不活動(dòng)的內(nèi)存頁面,將經(jīng)常使用的數(shù)據(jù)保留在緩存中,這發(fā)生在服務(wù)器最空閑的時(shí)候。

這是Linux內(nèi)核該做的事。也避免將交換空間設(shè)置得過大,否則會(huì)導(dǎo)致性能問題、中斷或響應(yīng)時(shí)間加長。

交換空間與不使用交換空間區(qū)別

上面所說是你有足夠多可用內(nèi)存。但實(shí)際情況是我們經(jīng)常會(huì)遇到內(nèi)存不夠用的時(shí)候。

當(dāng)您的服務(wù)器沒有足夠的內(nèi)存時(shí),在內(nèi)存需求高峰期間,交換空間將被頻繁使用并且明顯增多。

如果您沒有足夠的內(nèi)存并且沒有交換空間,這通常會(huì)導(dǎo)致無法為需要更多內(nèi)存的進(jìn)程分配內(nèi)存。

作為最后的手段,內(nèi)核將部署OOM殺手來終止高內(nèi)存使用的進(jìn)程,比如MySQL、Java。

要更詳細(xì)地了解Linux交換空間Swap,請閱讀Linux內(nèi)核文檔中的交換空間管理和Page Frame回收文檔。

如果您的交換空間已使用始終為0,那么您確實(shí)有大量空閑可用的內(nèi)存RAM,在這種情況下,刪除交換空間可能是最好的。

總的來說交換空間I/O的性能很差。如果Linux服務(wù)器確實(shí)有大量空閑可用的內(nèi)存RAM,則應(yīng)調(diào)整或禁用交換空間。

禁用交換空間后,當(dāng)服務(wù)器急劇需要內(nèi)存時(shí),將缺少更多的反應(yīng)時(shí)間,OOM可能會(huì)不等你反應(yīng)過來,就將消耗大量內(nèi)存的進(jìn)程殺死。

內(nèi)核緩存壓力和交換空間

假設(shè)您已啟用交換空間??梢钥紤]按照以下教程調(diào)整服務(wù)器的緩存壓力和交換空間的swappiness值。

vfs_cache_pressure控制內(nèi)核回收內(nèi)存的頻率,用于緩存頁面和inode對象。默認(rèn)值是100。我們推薦設(shè)置50到200。

swappiness此值用于定義內(nèi)核交換內(nèi)存頁面的頻繁程度。較高的值會(huì)導(dǎo)致頻繁使用交換空間,從而影響Linux服務(wù)器性能。

較低的值會(huì)減少使用交換空間的頻率。默認(rèn)值是60,我們推薦設(shè)置1到60之間。如果你需要改變vfs_cache_pressureswappiness的值。

請使用你喜歡的編輯器打開etc/sysctl.conf文件。在本教程中我們將使用vim打開文件。添加或替換vm.swappinessvm.vfs_cache_pressure值。

sudo vim etc/sysctl.conf
vm.swappiness=10
vm.vfs_cache_pressure=200

例如,如果您在內(nèi)存不足時(shí),您可以嘗試將swappiness值設(shè)置為10,vfs_cache_pressure的值設(shè)置200。

這將會(huì)使內(nèi)存回收變得更快,增加內(nèi)存緩存壓力。我們知道緩存對性能有好處,快速的內(nèi)存回收會(huì)適得其反。

但是與過于頻繁的使用交換空間相比,增大vfs_cache_pressure值會(huì)更好一點(diǎn)。

因此,不在內(nèi)存中保留盡可能多的緩存將有助于減少使用交換空間的頻率。此外,將vm.swappiness設(shè)置為10,將減少交換空間的使用。

假如你的Linux服務(wù)器在具有大量空閑可用的內(nèi)存,你可以嘗試將swappinessvfs_cache_pressure修改為以下值。

vm.swappiness=10
vm.vfs_cache_pressure=50

這將降低緩存壓力。由于緩存對性能有好處,我們希望將緩存數(shù)據(jù)在內(nèi)存中保留更長時(shí)間。由于緩存會(huì)變大,我們?nèi)匀幌M麥p少交換空間的使用,從而降低磁盤I/O。

你可以使用以下cat命令查看swappinessvfs_cache_pressure的當(dāng)前值:

sudo cat /proc/sys/vm/swappiness
sudo cat /proc/sys/vm/vfs_cache_pressure

如果你要在不重新啟動(dòng)Linux服務(wù)器的情況下臨時(shí)啟用并設(shè)置swappinessvfs_cache_pressure的值,請運(yùn)行以下sysctl命令:

sudo sysctl -w vm.swappiness=10
sudo sysctl -w vm.vfs_cache_pressure=50

結(jié)論

至此,你應(yīng)該了解在Linux上使用和不使用交換空間的區(qū)別,在使用交換空間時(shí)你將獲得更多反應(yīng)時(shí)間與更好的Linux服務(wù)器性能。

如何在交換空間和內(nèi)存的使用上作出取舍,如你有任何疑問,請?jiān)谠u(píng)論反饋。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1336

    瀏覽量

    40084
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11123

    瀏覽量

    207900
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    8700

    瀏覽量

    84539
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    2902

    瀏覽量

    73536
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何在Ubuntu Linux釋放/boot分區(qū)中的空間

    Ubuntu Linux,/boot分區(qū)是用于存儲(chǔ)啟動(dòng)相關(guān)的文件的。隨著時(shí)間的推移,這個(gè)分區(qū)可能會(huì)變滿,導(dǎo)致系統(tǒng)無法安裝新的內(nèi)核和更新。本文將介紹如何釋放/boot分區(qū)中的空間,并
    的頭像 發(fā)表于 11-28 10:04 ?676次閱讀

    Linux下增加磁盤空間的步驟

    在給Linux分區(qū)時(shí),總是有那么一點(diǎn)吝嗇,給的空間較小。使用過程中,裝上Matlab等大型軟件后,才驀然發(fā)現(xiàn)磁盤已沒有空間,不過亡羊補(bǔ)牢為時(shí)不晚。Warning:對硬盤分區(qū)很危險(xiǎn),要
    發(fā)表于 07-11 08:42

    Linux用戶空間與內(nèi)核空間區(qū)別?

    為的分為兩個(gè)部分--用戶空間與內(nèi)核空間。用戶空間地址分布從0到3GB(PAGE_OFFSET,0x86中它等于0xC0000000),3GB到4GB為內(nèi)核
    發(fā)表于 06-05 04:35

    電路交換與分組交換區(qū)別是什么?

    電路交換與分組交換區(qū)別是什么?
    發(fā)表于 05-18 06:55

    串口使用DMA與不使用DMA有什么區(qū)別

    什么是DMA?DMA的意義是什么?串口使用DMA與不使用DMA有什么區(qū)別?Stm32如何實(shí)現(xiàn)串口DMA傳輸?
    發(fā)表于 12-07 07:30

    Linux與其他操作系統(tǒng)的區(qū)別

    Linux與其他操作系統(tǒng)的區(qū)別 Linux與其他操作系統(tǒng)的區(qū)別  Linux可以與MS-DOS、OS/2、Windows等其他操作系統(tǒng)共存
    發(fā)表于 01-18 12:42 ?1632次閱讀

    什么是空間數(shù)據(jù)交換中心

    什么是空間數(shù)據(jù)交換中心 空間數(shù)據(jù)交換中心是指對不同范圍、領(lǐng)域的空間信息及其元數(shù)據(jù)進(jìn)行有效管理、給信息需求 者提供空間數(shù)據(jù)
    發(fā)表于 06-17 07:40 ?957次閱讀

    自由空間交換,自由空間交換是什么意思

    自由空間交換,自由空間交換是什么意思 自由空間交換是利用自由
    發(fā)表于 03-20 10:28 ?1235次閱讀

    Linux中限制用戶空間

    2007-05-10 17:06:53 分享到: Linux中限制用戶的磁盤使用空間使用的是Quota,一般Quota安裝Linux時(shí)就
    發(fā)表于 11-07 10:20 ?0次下載

    Linux系統(tǒng)內(nèi)存類型交換空間詳解

    學(xué)習(xí)如何修改你的系統(tǒng)交換空間的容量,以及你到底需要多大的交換空間
    的頭像 發(fā)表于 02-02 17:31 ?4520次閱讀
    <b class='flag-5'>Linux</b>系統(tǒng)<b class='flag-5'>上</b>內(nèi)存類型<b class='flag-5'>交換</b><b class='flag-5'>空間</b>詳解

    概述Linux創(chuàng)建或擴(kuò)展交換分區(qū)的三種方法

    有時(shí)候在你安裝后搖升級(jí) RAM 的時(shí)候需要增加一點(diǎn)交換分區(qū)的空間,比如你要將你的系統(tǒng)的 RAM 從 1GB 升級(jí)到 2GB 你,那么你就不得不將你的交換分區(qū)空間也升級(jí)一下(從 2GB
    發(fā)表于 04-25 14:38 ?793次閱讀

    核心交換機(jī)、匯聚交換機(jī)與普通交換機(jī)的區(qū)別介紹

    核心交換機(jī)并不是交換機(jī)的一種類型,放在核心層(網(wǎng)絡(luò)主干部分)的交換機(jī)叫核心交換機(jī)。匯聚層交換機(jī),是多臺(tái)接入層
    發(fā)表于 03-19 14:50 ?1.2w次閱讀

    linux與android的區(qū)別是什么

    linux與android有什么區(qū)別?有以下三點(diǎn)區(qū)別
    發(fā)表于 05-26 09:41 ?2117次閱讀
    <b class='flag-5'>linux</b>與android的<b class='flag-5'>區(qū)別</b>是什么

    核心交換機(jī)和普通交換機(jī)的區(qū)別?

    核心交換機(jī)和普通交換機(jī)的區(qū)別? 核心交換機(jī)(Core Switch)是網(wǎng)絡(luò)中的重要組成部分,與普通交換機(jī)(Regular Switch)有許
    的頭像 發(fā)表于 12-07 14:39 ?1247次閱讀

    交換機(jī)cpu和交換芯片的關(guān)系及區(qū)別

    交換機(jī)CPU和交換芯片在交換機(jī)中各自扮演著重要的角色,并且它們之間存在一定的關(guān)系與區(qū)別
    的頭像 發(fā)表于 03-18 14:06 ?1180次閱讀