1、為什麼要使用虛擬記憶體
當我們沒有多餘的錢去購買大記憶體的雲伺服器時,但是當前伺服器裡面的軟體和程式執行的比較多導致記憶體不夠用了。這個時候可以透過增加虛擬記憶體來擴大記憶體容量。但是在啟用虛擬記憶體時,需要仔細考慮系統的實際需求和硬體配置,以及權衡虛擬記憶體的優缺點,考慮好利弊後在開啟虛擬記憶體。
2、什麼是虛擬記憶體
虛擬記憶體是一種將部分實體記憶體擴充套件到磁碟空間的技術,以提供更大的記憶體空間和更好的系統效能。虛擬記憶體允許系統在實體記憶體不足時,將不常用的記憶體頁轉移到磁碟上,從而釋放實體記憶體供活躍的程序使用。
使用虛擬記憶體的優點:
-
增加可用記憶體: 虛擬記憶體允許系統在實體記憶體不足時將部分記憶體資料儲存到磁碟上,從而擴充套件了系統可用的記憶體空間。這樣,即使系統的實體記憶體已經用盡,
仍然可以繼續執行應用程式,避免了因記憶體不足而導致的系統崩潰或應用程式崩潰。
-
提高系統穩定性:虛擬記憶體可以防止系統因記憶體不足而崩潰。當實體記憶體不足時,Linux會將部分不活躍的記憶體頁交換到交換空間中,從而釋放實體記憶體供活躍的程序使用,提高了系統的穩定性和可靠性。
-
支援大型程式執行: 對於需要大量記憶體的應用程式,如資料庫伺服器或大型資料處理應用,虛擬記憶體可以提供額外的記憶體空間,使其能夠在實體記憶體有限的情況下繼續執行。
-
靈活管理記憶體:虛擬記憶體允許系統管理員根據實際需求動態調整交換空間的大小。透過調整交換空間的大小,可以根據系統的負載情況和應用程式的記憶體需求來最佳化系統的效能和穩定性。
-
提高系統響應速度:虛擬記憶體可以減少因記憶體不足而導致的系統響應速度下降的情況。當系統使用虛擬記憶體時,雖然會增加磁碟 I/O 操作,但可以保持系統執行,並在記憶體資源再次可用時恢復正常操作。
使用虛擬記憶體的弊端:
- 效能影響: 虛擬記憶體的使用可能會導致系統效能下降。當系統記憶體不足時,作業系統會將部分記憶體資料交換到磁碟上的交換空間中,這涉及到頻繁的磁碟讀寫操作,會增加系統的響應時間和延遲。
- 磁碟空間消耗: 交換空間佔用磁碟空間,可能會導致磁碟空間不足的問題,特別是在磁碟本身就比較小的情況下。
- SSD 磨損: 如果交換空間設定在 SSD 上,頻繁的寫入操作可能會加速 SSD 的磨損,縮短其壽命。
- 應用程式效能下降:當系統使用虛擬記憶體時,應用程式可能會因為頻繁的磁碟讀寫而效能下降,尤其是對於需要大量記憶體的應用程式。
- 系統穩定性: 如果交換空間設定不當或者交換空間不足,可能會導致系統穩定性問題,如系統死鎖或應用程式崩潰。
總的來說,虛擬記憶體的使用可以提高系統的穩定性、可用性和效能,使系統能夠更好地應對變化的工作負載和記憶體需求。但是在啟用虛擬記憶體時,需要仔細考慮系統的實際需求和硬體配置,以及權衡虛擬記憶體的優缺點。在某些情況下,可能需要調整交換空間的大小或者考慮其他記憶體管理策略來最佳化系統效能。
3、實體記憶體
實體記憶體是用於儲存正在執行的程式和資料的地方,讀寫速度低於CPU,但是高於磁碟。當應用程式需要使用記憶體時,它會向作業系統請求記憶體分配。作業系統會將需要的資料載入實體記憶體中,並管理記憶體的分配和釋放。當實體記憶體不足時,系統將部分資料從實體記憶體交換到磁碟上的交換區(Swap),這樣可以釋放實體記憶體,以便給其他程序使用。將資料交換到Swap會導致效能下降。因此係統管理員和開發人員最好要合理規劃和管理實體記憶體,確保系統具有足夠的記憶體來執行應用程式和提供良好的效能。
4、Swap介紹
Swap是Linux系統中的一種虛擬記憶體技術,用於輔助實體記憶體(RAM)的管理。當實體記憶體不足時,Swap提供了一種將部分記憶體內容交換到硬碟上的方法,以釋放實體記憶體供其他程序使用。當實體記憶體不夠的時候,會把不活躍的程序暫時儲存到交換區。當需要這條程序時就從交換區重新載入到記憶體,否則它不會主動交換到實體記憶體中。swap有三種交換方式:交換分割槽(Swap Partition)、交換檔案(Swap File)、交換空間(Swap Space)。
swap相關使用命令:
顯示當前啟用的交換分割槽和交換檔案的摘要資訊,包括路徑、大小和使用情況:
swapon -s
swapon -show
啟用指定的交換分割槽或交換檔案:
swapon /opt/swapfile # 啟用交換檔案
swapon /dev/vda1 # 啟用交換分割槽
建立交換分割槽或交換檔案:
mkswap swapdata
關閉正在使用的交換分割槽或交換檔案
swapoff /opt/swapfile # 關閉交換檔案
swapoff /dev/vda1 # 關閉交換分割槽
多個swap設定優先順序, 優先順序相同將同時使用, 在0到32767中間選一個數字
swapon -p 0 /opt/swapfile # 交換檔案路徑
5、虛擬記憶體設定
透過設定交換檔案設定虛擬記憶體。
5.1、檢視可用磁碟空間
df -h
5.2、 使用 dd
工具來建立一個交換檔案
dd if=/dev/zero of=/opt/swapdata bs=1024 count=16777216
引數說明:
dd
:dd
用來建立交換檔案。if=/dev/zero
:if
參數列示輸入檔案(input file)的路徑。/dev/zero`是一個特殊裝置檔案,它會提供一系列的零位元組。of=/opt/swapdata
:of
參數列示輸出檔案(output file)的路徑。指定了交換檔案的路徑為/opt/swapdata
。選擇其他路徑和檔名。bs=1024
:bs
參數列示塊大小(block size),指定dd
命令一次傳輸的資料塊大小為1024位元組(即1KB)。根據需求進行調整。count=16777216
:建立一個16GB大小的交換檔案。與bs
引數相乘,即16GB = 1024 * 1024 * 16 可以根據需要調整此引數來大小
建立成功在/opt目錄生成一個swapdata檔案
5.3、 設定交換檔案的許可權為只有 root 使用者能讀寫:
chown root:root /opt/swapdata # 交換檔案的所有者和所屬組
chmod 600 /opt/swapdata #只有root使用者能讀寫
5.4、 建立檔案型別設定為交換檔案
mkswap /opt/swapdata # 交換檔案路徑
5.5、啟用檔案:指定的交換檔案
swapon /opt/swapdata
啟用成功後就可以使用 swapon -s
檢視交換檔案的摘要資訊了
5.6、機器重啟的時候自動掛載Swap
# 進入/etc/fstab檔案進行修改。
vim /etc/fstab
#末尾追加
/opt/swapdata swap swap defaults 0 0
5.7、配置swap分割槽的使用機制
對於使用多大比例記憶體之後開始使用swap,在系統配置檔案中可以透過調整引數進行修改。檢視比例資訊:
cat /proc/sys/vm/swappiness
該引數範圍為0-100。0 就是最大限度使用記憶體,儘量不使用swap。100是積極使用swap。越高越會使用swap分割槽。重新配置值:
sysctl vm.swappiness=30
如需永久配置:
echo "vm.swappiness = 30" >> /etc/sysctl.conf
5.8、 檢視使用情況
透過 free -h
命令檢視記憶體使用情況。
6、關閉虛擬記憶體
關閉 swap 檔案
swapoff /opt/swapdata
刪除swap分割槽檔案
rm -rf /opt/swapdata
刪除fstab檔案裡追加的swap分割槽開機自動掛載配置內容
/opt/swapdata swap swap defaults 0 0