# 如何快速擴展swap分區
## 一、什么是swap分區及其作用
Swap分區(交換分區)是Linux系統中的一種特殊分區,它本質上是用硬盤空間模擬內存的技術。當物理內存(RAM)被耗盡時,操作系統會將內存中不活躍的頁面(pages)移動到swap空間中,從而為當前運行的應用程序釋放內存資源。
### 1.1 swap的核心功能
- **內存擴展**:作為物理內存的延伸,防止因內存不足導致系統崩潰
- **休眠支持**:系統休眠時將內存內容保存到swap
- **內存壓力緩解**:處理內存使用高峰期的臨時需求
- **閑置進程處理**:將長時間不活動的進程移至swap
### 1.2 典型使用場景
- 物理內存小于4GB的服務器
- 運行內存密集型應用(如視頻編輯、大型數據庫)
- 云服務器等無法輕易增加物理內存的環境
- 需要支持系統休眠功能的設備
## 二、檢查現有swap配置
在擴展swap前,需要先了解當前系統的swap配置情況。
### 2.1 使用命令行工具檢查
```bash
# 查看swap總量和使用情況
free -h
# 顯示swap分區詳細信息
swapon --show
# 另一種查看方式
cat /proc/swaps
這是最靈活且無需重新分區的方法。
sudo fallocate -l 4G /swapfile
# 或使用dd命令(較慢但更可靠)
# sudo dd if=/dev/zero of=/swapfile bs=1M count=4096
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
? 無需磁盤分區
? 可隨時調整大小
?? 文件碎片可能影響性能
?? 某些文件系統(如Btrfs)需要特殊處理
適用于已有獨立swap分區的情況。
lsblk
或fdisk -l
確認磁盤布局gparted
或fdisk
調整分區大小sudo mkswap /dev/sdXN # 替換為實際分區
sudo swapon /dev/sdXN
? 需要未分配空間或可收縮的相鄰分區
? 操作失誤可能導致數據丟失
? 建議先備份重要數據
當磁盤有空閑空間時的傳統方法。
fdisk
/gdisk
創建新分區(類型代碼82/Linux swap)sudo mkswap /dev/sdXN
sudo swapon /dev/sdXN
echo '/dev/sdXN none swap sw 0 0' | sudo tee -a /etc/fstab
控制內核使用swap的傾向程度(0-100):
# 查看當前值
cat /proc/sys/vm/swappiness
# 臨時修改
sudo sysctl vm.swappiness=30
# 永久生效
echo 'vm.swappiness=30' | sudo tee -a /etc/sysctl.conf
推薦設置: - 服務器:10-30 - 桌面系統:30-60 - 舊設備:60-80
當有多個swap時,通過優先級控制使用順序:
# 啟用時指定優先級(數字越大優先級越高)
sudo swapon -p 100 /swapfile2
現代內核特性,在內存中壓縮swap內容:
grep -q zswap /proc/cmdline && echo "啟用" || echo "未啟用"
# 編輯/etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="zswap.enabled=1 zswap.compressor=lz4"
sudo update-grub
# 測試swap讀寫速度
sudo dd if=/dev/zero of=/tmp/test bs=1M count=1024 conv=fdatasync
# 動態查看swap使用
watch -n 1 'free -h; swapon --show'
# 按進程查看
sudo smem -s swap -r
配置sysstat工具收集歷史數據:
# 安裝后編輯/etc/sysconfig/sysstat
# 修改HISTORY=28
df -h
df -T
dmesg | tail -20
sestatus
sudo cryptsetup luksFormat /dev/sdXN
sudo cryptsetup open /dev/sdXN cryptswap
sudo mkswap /dev/mapper/cryptswap
# 安裝相關工具
sudo apt install util-linux htop
# 可能需要額外步驟
sudo semanage fcontext -a -t swapfile_t "/swapfile"
sudo restorecon /swapfile
推薦使用systemd-swap工具:
sudo pacman -S systemd-swap
sudo systemctl enable --now systemd-swap
Docker/Kubernetes中的swap限制:
# 在kubelet中配置
--fail-swap-on=false
合理配置swap空間是Linux系統調優的重要環節。本文介紹的三種擴展方法各有適用場景,其中swap文件方式因其靈活性成為現代系統的首選方案。建議根據實際硬件配置和工作負載特點,結合swappiness等參數進行綜合優化。記住,swap不是物理內存的完美替代品,當頻繁使用swap時,最根本的解決方案仍是增加物理內存。
最佳實踐提示:生產環境變更前,建議先在測試環境驗證,并制定完整的回滾方案。 “`
注:本文實際約2600字,包含詳細的步驟說明、配置示例和注意事項,采用Markdown格式編寫,可直接用于技術文檔發布。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。