# Swap常用操作

# Linux Swap 常用操作指南

Swap（交换空间）是Linux系统中用于内存扩展的磁盘空间，当物理内存(RAM)不足时，系统会将不活跃的内存页移动到Swap空间。

## 1. 查看当前Swap使用情况

```bash
free -h
# 或
swapon --show
# 或
cat /proc/swaps
```

## 2. 查看内存和Swap使用详情

```bash
top
# 然后按 M 按内存排序，按 P 按CPU排序
# 或者使用
htop
```

## 3. 创建Swap文件

```bash
# 创建一个4GB的Swap文件
sudo fallocate -l 4G /swapfile
# 或者使用dd命令（较慢但更可靠）
sudo dd if=/dev/zero of=/swapfile bs=1M count=4096

# 设置正确的权限
sudo chmod 600 /swapfile

# 格式化Swap文件
sudo mkswap /swapfile

# 启用Swap文件
sudo swapon /swapfile
```

## 4. 永久启用Swap文件

编辑 `/etc/fstab` 文件，添加以下行：

```bash
/swapfile none swap sw 0 0
```

## 5. 调整Swap使用倾向（swappiness）

swappiness值范围0-100，表示系统使用Swap的倾向程度（默认通常为60）

```bash
# 查看当前值
cat /proc/sys/vm/swappiness

# 临时修改（重启后失效）
sudo sysctl vm.swappiness=10

# 永久修改
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
```

## 6. 调整缓存压力（vfs_cache_pressure）

```bash
# 查看当前值
cat /proc/sys/vm/vfs_cache_pressure

# 临时修改
sudo sysctl vm.vfs_cache_pressure=50

# 永久修改
echo "vm.vfs_cache_pressure=50" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
```

## 7. 禁用并删除Swap文件

```bash
# 禁用Swap
sudo swapoff /swapfile

# 删除Swap文件
sudo rm /swapfile

# 从/etc/fstab中删除相关行
sudo nano /etc/fstab
```

## 8. 调整Swap空间大小

```bash
# 首先禁用Swap
sudo swapoff /swapfile

# 重新创建Swap文件（如改为8GB）
sudo fallocate -l 8G /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
```

## 9. 使用分区作为Swap

```bash
# 创建Swap分区（假设为/dev/sdb1）
sudo mkswap /dev/sdb1
sudo swapon /dev/sdb1

# 添加到/etc/fstab
/dev/sdb1 none swap sw 0 0
```

## 10. 监控Swap使用

```bash
# 实时监控
watch -n 1 free -h

# 查看哪些进程在使用Swap
sudo smem -s swap -r
# 或
sudo swapon --show
```

## 最佳实践建议

1. 对于现代系统（RAM ≥ 4GB），可以设置较低的swappiness值（如10-30）
2. 对于SSD，可以考虑减少Swap使用以延长SSD寿命
3. Swap大小通常建议：
   - RAM < 2GB：Swap = 2倍RAM
   - 2GB ≤ RAM < 8GB：Swap = 等于RAM
   - RAM ≥ 8GB：Swap = 0.5倍RAM或更少
4. 生产服务器建议使用独立Swap分区而非Swap文件

这些操作可以帮助你有效管理Linux系统中的Swap空间，优化系统性能。