# ubuntu设置swap交换缓存

你这台 **Ubuntu 14.04** 系统目前是 **没有启用交换分区/交换文件** 的，所以 `free -mh` 里显示 **交换：0B**，`sar -S` 也全是 0。要启用 swap（交换缓存），需要手动添加。

---

## 一、创建交换文件（推荐方法）

1. **创建一个 2G 的交换文件**（可以根据内存大小决定，通常设为内存的 1～2 倍，但不要超过硬盘实际空间）：
    
    ```bash
    sudo fallocate -l 2G /swapfile
    
    ```
    
    如果 `fallocate` 不支持，可以用 `dd`：
    
    ```bash
    sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
    
    ```
2. **设置权限**
    
    ```bash
    sudo chmod 600 /swapfile
    
    ```
3. **格式化为交换分区**
    
    ```bash
    sudo mkswap /swapfile
    
    ```
4. **启用 swap**
    
    ```bash
    sudo swapon /swapfile
    
    ```
5. **检查是否生效**
    
    ```bash
    free -mh
    
    ```
    
    会显示有了 2G 的 Swap。  
    你再执行：
    
    ```bash
    sar -S 1 5
    
    ```
    
    就会有 kbswpfree 数值了。
6. **永久生效**  
    编辑 `/etc/fstab`，在文件最后添加一行：
    
    ```
    /swapfile   none    swap    sw    0   0
    
    ```

---

## 二、如果你有空闲磁盘分区

也可以用 `mkswap` 格式化一个分区（比如 `/dev/sdb2`），然后 `swapon /dev/sdb2`，并写入 `/etc/fstab`。

---

## 三、调整内核交换策略（可选）

Linux 默认 **尽量不用 swap**，你可以通过 `swappiness` 调整：

```bash
cat /proc/sys/vm/swappiness

```

默认是 **60**（数值越高越倾向使用 swap）。  
临时修改：

```bash
sudo sysctl vm.swappiness=10

```

永久修改：  
编辑 `/etc/sysctl.conf`，添加：

```
vm.swappiness=10

```

保存后执行：

```bash
sudo sysctl -p

```

---

🔧 建议：

- 你的内存才 1.8G，**一定要开 swap**，否则遇到大进程容易 OOM。
- 推荐 swapfile **2G** 左右，再配合 `vm.swappiness=10`，避免过度使用交换区导致系统卡顿。

---

要不要我帮你写一份 **Ubuntu 14.04 一键创建 + 启用 2G swap 的脚本**（直接复制运行即可）？

👌 现在效果很清楚了：

- 你已经启用了 **2 GiB swap**（`free -mh` 里显示出来了）。
- `sar -S` 也显示 swap 空间总量：
    
    ```
    kbswpfree  2096880   （大约 2GB 可用）
    kbswpused       268 （大约 268KB 被用）
    %swpused       0.01%
    
    ```
    
    → 说明 swap 已经生效，并且被轻微使用。

---

### 你目前的状态

- 内存总计：**1.8 GiB**，已用 ~727 MiB，可用 ~898 MiB。
- 缓冲/缓存 ~1 GiB，说明系统在尽可能利用内存做缓存。
- Swap 已经挂上，使用量几乎为 0，只在少数情况下被触发。
- `kbswpcad`（swap cache）显示有 **13% 命中率**，说明有部分页被交换出去后又被引用，但整体使用很轻微。

---

### 优化建议

1. **调整 swappiness（控制 swap 使用倾向）**  
    目前系统的默认值应该是 `60`。  
    你内存比较小（1.8 G），建议设低一些，避免过早 swap：
    
    ```bash
    echo 10 | sudo tee /proc/sys/vm/swappiness
    
    ```
    
    永久生效：在 `/etc/sysctl.conf` 里加：
    
    ```
    vm.swappiness=10
    
    ```
    
    然后：
    
    ```bash
    sudo sysctl -p
    
    ```
2. **设置 cache 压缩（可选）**  
    如果升级到较新内核，可以考虑用 `zram` 压缩 swap，性能更好。不过你现在是 5.4 内核，已经支持 zram，可以配置 `/dev/zram` 来当 swap。
3. **监控 swap 使用情况**
    
    
    - 查看 swap 使用情况：
        
        ```bash
        swapon -s
        
        ```
    - 结合内存监控：
        
        ```bash
        vmstat 1
        
        ```
        
        如果 `si/so`（swap in/out）经常不为 0，就说明 swap 压力大了。

---

⚡ 总结：

- 你已经 **成功启用了 2 G swap**。
- swap 正常工作，但几乎没用到，不会拖慢性能。
- 建议把 `vm.swappiness` 调到 **10** 左右，主要靠内存跑，只有在内存紧张时才用 swap。

要不要我给你写一个 **一键设置 swappiness + 开机启用 swap 检查的脚本**，方便你服务器自动化维护？