大家在使用Linux系統(比如常用的Ubuntu)時,是不是偶爾會遇到“內存不足”的彈窗?比如運行大型編譯任務、多開虛擬機、做數據分析,或者把Linux當服務器用的時候,物理內存一旦“告急”,系統就會卡頓甚至崩潰。這時候,Swap交換空間就成了“救場神器”。
今天就帶大家全面搞懂Swap:它是什么、什么時候需要擴充、擴充后對堆內存和存儲速率有啥影響,最后附上一步到位的Ubuntu擴充教程,新手也能跟著做!

一、先搞懂:Swap交換空間到底是什么?
簡單說,Swap就像Linux的“虛擬內存”,和Windows的虛擬內存原理類似——當物理內存(就是你電腦里插的內存條)不夠用的時候,系統會把內存中暫時用不上的數據,臨時存到硬盤(或SSD)的Swap分區(qū)/文件里,騰出物理內存給急需的程序使用。
比如Ubuntu系統默認的Swap大小通常是2G,如果你物理內存是8G,運行一個占10G內存的程序,這時候Swap就會“接手”剩下的2G,避免程序直接崩潰。
二、這些場景下,一定要擴充Swap!
不是所有情況都需要擴充Swap,關鍵看你的使用場景和系統狀態(tài)。以下3種情況,建議立刻檢查并擴充Swap:
1.物理內存不足,頻繁觸發(fā)“內存告警”
?比如物理內存8G,卻要運行占12G內存的大型軟件(如Matlab、Docker容器集群、視頻渲染工具);
?多任務并發(fā)時(比如開著代碼編輯器、瀏覽器、虛擬機、數據庫),系統卡頓明顯,用free -h命令查看時,“可用內存”接近0,Swap卻已經占滿。
2.服務器長期高負載運行
如果把Linux當服務器(比如Web服務器、數據庫服務器),長期有大量進程在后臺運行,即使物理內存暫時夠用,也建議擴充Swap——避免突發(fā)流量(比如瞬間大量用戶訪問)導致內存峰值超負載,從而保證服務穩(wěn)定。
3.低內存設備的“續(xù)命需求”
比如樹莓派、嵌入式Linux設備(物理內存可能只有2G/4G),運行輕量級服務器或邊緣計算任務時,2G默認Swap不夠用,擴充后能顯著減少“內存溢出”風險。
三、擴充Swap對堆內存的影響:有幫助但也有“坑”
首先得明確:堆內存是程序運行時動態(tài)申請的內存空間(比如Java的JVM堆、C++的new申請的內存),是程序“干活”的核心內存區(qū)域。Swap和堆內存的關系很緊密,擴充后影響主要有兩點:
1.正面影響:避免堆內存“溢出崩潰”
當程序申請的堆內存超過物理內存上限時,系統會把堆內存中“暫時閑置”的數據(比如很久沒調用的變量、緩存數據)轉移到Swap中,釋放物理內存給新的堆內存申請。
舉個例子:你運行一個Java程序,JVM堆設置為10G,而物理內存只有8G。如果沒有Swap,程序會直接報“OOM(內存溢出)”錯誤;有了8G Swap后,系統會把堆中暫時不用的2G數據存到Swap,程序能正常運行。
2.負面影響:堆內存“交換頻繁”會變慢
如果堆內存數據需要頻繁在“物理內存”和“Swap”之間切換(行業(yè)里叫“內存顛簸”),程序響應會明顯變慢。因為硬盤/ SSD的讀寫速度,比物理內存慢了幾個數量級(物理內存是GB/s級,機械硬盤是MB/s級,即使是SSD也差10倍以上)。
比如你寫的程序頻繁申請和釋放堆內存,且數據量接近物理內存上限,Swap會反復“存/取”堆數據,此時你會發(fā)現程序卡頓、CPU占用率飆升(因為CPU要等數據交換完成)。
四、對存儲速率的影響:別忽視硬盤IO的壓力
Swap本質是“用硬盤空間當內存”,所以它的讀寫速度完全依賴你的存儲設備,同時也會占用存儲設備的IO資源,影響其他操作:
1.不同存儲介質,影響天差地別
|
存儲類型
|
Swap讀寫速度
|
對系統的影響
|
|
機械硬盤(HDD)
|
慢(約50-150MB/s)
|
嚴重占用硬盤IO,同時做文件拷貝、安裝軟件會卡頓,甚至系統整體響應變慢
|
|
固態(tài)硬盤(SSD)
|
較快(約500-2000MB/s)
|
影響比HDD小,但頻繁讀寫Swap會消耗SSD的“擦寫壽命”(SSD有固定擦寫次數)
|
|
nvme固態(tài)硬盤
|
很快(約3000-7000MB/s)
|
影響最小,接近物理內存速度,適合作為Swap存儲介質
|
2. Swap使用率過高,整個系統會“卡殼”
如果Swap使用率超過50%,且持續(xù)上升,說明物理內存已經嚴重不足,系統大部分時間都在“搬數據”(把物理內存數據寫到Swap,再把Swap數據讀回物理內存),此時:
?打開文件、切換軟件要等很久;
?命令行輸入指令,回車后要延遲幾秒才響應;
?甚至鼠標光標都會“卡頓跳幀”。
五、實戰(zhàn):Ubuntu下擴充Swap的7步詳細教程
以Ubuntu系統為例,從“查看當前Swap”到“開機自動生效”,每一步都有具體命令和示例,新手也能跟著做(其他Linux發(fā)行版步驟類似,命令通用)。
前置準備
?確保系統有足夠的硬盤/ SSD空間(比如要擴到8G,就需要至少8G空閑空間);
?用sudo權限操作(需要管理員密碼)。
步驟1:查看當前Swap大小
先執(zhí)行free -h命令,查看當前Swap的總大小和使用情況(-h表示“人類可讀格式”,用GB/MB顯示,更直觀):
free-h
執(zhí)行后會看到類似輸出:
總計 已用 空閑 共享 緩沖/緩存 可用內存: 19Gi 1.2Gi 5.9Gi 3.0Mi 12Gi 17Gi交換: 2.0Gi 0B 2.0Gi
能看到默認Swap是2G,這時候如果要擴到8G,繼續(xù)下一步。
步驟2:先關閉現有Swap
擴充前必須關閉當前的Swap(避免數據沖突),執(zhí)行命令:
sudo swapoff -a
輸入管理員密碼后,再用free -h驗證,會發(fā)現“交換”那一行的“總計”變成0,說明關閉成功:
交換: 0B 0B 0B
步驟3:創(chuàng)建新的Swap文件
用dd命令創(chuàng)建一個指定大小的Swap文件(這里以擴到8G為例),命令如下:
sudoddif=/dev/zero of=/swapfile bs=1G count=8
?解釋一下參數:
?if=/dev/zero:從“零設備”讀取數據(用來生成空白文件);
?of=/swapfile:把生成的文件保存到根目錄,命名為swapfile;
?bs=1G:每次讀寫的“塊大小”是1G;
?count=8:讀取8次塊,總大小= 1G×8=8G(想擴到16G就把count改成16)。
執(zhí)行后會看到類似輸出,說明文件創(chuàng)建成功:
記錄了8+0的讀入記錄了8+0的寫出8589934592字節(jié)(8.6GB,8.0GiB)已復制,7.04727秒,1.2GB/s
步驟4:設置Swap文件權限(關鍵!)
為了安全,必須把Swap文件的權限設為600——只有root用戶能讀寫,其他用戶沒有權限(防止誤修改或篡改),命令:
sudochmod600 /swapfile
執(zhí)行后沒有輸出,說明權限設置成功。
步驟5:格式化Swap文件
把剛才創(chuàng)建的空白文件格式化為“Swap格式”,讓系統能識別為交換空間,命令:
sudo mkswap /swapfile
執(zhí)行后會看到類似輸出,包含Swap的UUID(不用管UUID,知道成功就行):
正在設置交換空間版本1,大小=8GiB(8589930496 個字節(jié))無標簽,UUID=C27ae28e-a3ea-47fa-ad81-7f4bc779fa8e
步驟6:啟用新的Swap
格式化后,啟用這個新的Swap文件,命令:
sudo swapon /swapfile
再用free -h驗證,會發(fā)現“交換”的總計變成8G,說明啟用成功:
交換: 8.0Gi 0B 8.0Gi
步驟7:配置開機自啟(避免重啟后失效)
默認情況下,重啟系統后新的Swap會失效,所以要把Swap文件添加到/etc/fstab配置文件中,讓系統開機自動加載。
1.用文本編輯器打開/etc/fstab:
sudo nano /etc/fstab
1.在文件末尾添加一行(復制粘貼即可,注意不要寫錯):
/swapfile none swap sw 0 0
1.保存退出:按Ctrl+O(字母O),再按回車確認,最后按Ctrl+X退出編輯器。
這樣重啟系統后,Swap還是8G,不會失效。
六、這些注意事項,新手一定要避開!
1.Swap大小不是越大越好:
一般建議Swap大小是物理內存的1-2倍(比如物理內存16G,Swap設16-32G);但如果是SSD,不建議超過物理內存(避免頻繁讀寫消耗SSD壽命)。
2.Swap文件別放錯位置:
盡量把Swap文件放在空閑空間充足的分區(qū),優(yōu)先選SSD(速度快),別放在機械硬盤的系統分區(qū)(會拖慢系統)。
3.關閉Swap要謹慎:
如果系統正在高負載運行(比如有程序在用Swap),突然執(zhí)行swapoff -a會導致程序崩潰,建議在“系統空閑時”操作。
4.定期檢查Swap使用情況:
用htop或free -h定期查看Swap使用率,如果長期超過50%,說明物理內存真的不夠用,建議升級內存條(Swap只是“應急”,不能替代物理內存)。
最后
Swap是Linux系統的“內存緩沖墊”,合理擴充能解決很多內存不足的問題,但也要注意它對堆內存和存儲速率的影響——不要過度依賴Swap,升級物理內存才是根本解決方案。
如果覺得這篇教程有用,歡迎分享給身邊用Linux的朋友~
-
Linux
+關注
關注
88文章
11760瀏覽量
219032 -
內存
+關注
關注
9文章
3210瀏覽量
76369 -
Ubuntu
+關注
關注
5文章
613瀏覽量
33371
發(fā)布評論請先 登錄
紅米顯示內存不足怎么處理
RAM內存不足錯誤
虛擬內存不足怎么解決
需要了解Linux swap分區(qū)的擴展
嵌入式Linux的Swap交換區(qū)剖析
手機內存不足的清理方法
電腦和手機的內存不足怎么辦
虛擬內存不足的解決辦法
Linux下擴充Swap交換空間:解決內存不足的實用指南,這些影響要注意!
評論