欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > Linux swap 配置与虚拟内存

Linux swap 配置与虚拟内存

2025/7/5 12:33:16 来源:https://blog.csdn.net/lida2003/article/details/144757910  浏览:    关键词:Linux swap 配置与虚拟内存

Linux swap 配置与虚拟内存

  • 1. 源由
  • 2. 检查
    • 2.1 查看当前 `swap` 的使用情况
    • 2.2 查看总的 `swap` 空间和使用情况
    • 2.3. 检查 `swap` 分区或文件的配置
    • 2.4 检查 `swap` 的优先级
    • 2.5 查看 `swappiness` 配置
  • 3. 配置
    • 3.1 创建新的 `swap` 文件
      • 步骤一:确定所需的 `swap` 大小
      • 步骤二:创建 `swap` 文件
      • 步骤三:设置文件权限
      • 步骤四:将文件设置为 `swap`
      • 步骤五:启用 `swap`
      • 步骤六:验证是否启用成功
    • 3.2 增加现有分区的 `swap` 空间
      • 步骤一:创建分区
      • 步骤二:创建文件系统
      • 步骤三: 启用分区
  • 4. 永久生效
    • 步骤一:编辑 `/etc/fstab`
    • 步骤二:添加以下内容
    • 步骤三:调整 `swappiness`
    • 步骤四:命令验证配置情况
  • 5. 总结

1. 源由

现在的系统,内存越来越大,从我接触的时候16MB/32MB/64MB的时代,已经来到了动不动就是4GB/8GB/16GB的时代。

最大的差异,就是当时MB的时代是台式计算机上的内存,而现在GB是嵌入式系统上的内存。

当然,这里有一点夸张的说法,因为GB嵌入式系统通常是那种使用AI算法,视频处理的边缘端嵌入式系统。而常规意义上的嵌入式系统还是在MB的系统。

这么大的系统内存,通常来说我们不太关注内存使用量,因为绰绰有余。但是当实际产品优化以及一些极限情况下,这个确实不容忽视的细节。

接下来,我们就看下Linux系统上如何配置swap来解决虚拟内存的问题。

2. 检查

要查看 Linux 系统中 swap 的配置,可以使用以下命令:

2.1 查看当前 swap 的使用情况

swapon --show

该命令会显示所有活动的 swap 分区或文件的信息,包括名称、大小、已用空间和优先级。

示例输出:

NAME      TYPE      SIZE   USED  PRIO
/swapfile file      2G     512M   -2

如果没有任何输出,说明当前系统没有启用 swap

2.2 查看总的 swap 空间和使用情况

free -h

示例输出:

              total        used        free      shared  buff/cache   available
Mem:          8.0G        3.2G        2.5G        512M        2.3G        4.1G
Swap:         2.0G        512M        1.5G

这里可以看到 swap 的总大小和已用空间。

2.3. 检查 swap 分区或文件的配置

  • 查看系统分区配置:

    cat /etc/fstab
    

    查找类似于以下内容的行:

    /swapfile none swap sw 0 0
    

    这表示系统使用的是 swapfile

  • 如果是 swap 分区,可能会看到:

    /dev/sda2 none swap sw 0 0
    

2.4 检查 swap 的优先级

cat /proc/swaps

此命令会显示与 swapon --show 类似的信息,但包含更底层的细节。


2.5 查看 swappiness 配置

swappiness 决定了系统使用 swap 的频率,范围为 0 到 100。

  • 查看当前 swappiness

    cat /proc/sys/vm/swappiness
    

    默认值通常是 60

  • 如果需要修改,可以通过以下命令临时调整(比如设置为 10):

    sudo sysctl vm.swappiness=10
    
  • 如果需要永久修改,编辑 /etc/sysctl.conf 文件,添加或修改以下内容:

    vm.swappiness=10
    

    保存后运行 sudo sysctl -p 生效。

3. 配置

增加 swap 空间的方法有两种:创建一个新的 swap 文件或添加一个新的 swap 分区。以下是使用 swap 文件增加空间的具体步骤,因为这种方式更加灵活且简单。


3.1 创建新的 swap 文件

步骤一:确定所需的 swap 大小

决定需要增加的大小,例如 4GB。

步骤二:创建 swap 文件

使用 dd 命令创建一个空文件:

sudo dd if=/dev/zero of=/swapfile bs=1M count=4096
  • of=/swapfile:指定文件路径(这里是根目录下的 swapfile)。
  • bs=1M count=4096:每次写入 1MB 的块,总共写入 4096 个块,即 4GB。

步骤三:设置文件权限

确保只有 root 用户可以访问该文件:

sudo chmod 600 /swapfile

步骤四:将文件设置为 swap

sudo mkswap /swapfile

步骤五:启用 swap

sudo swapon /swapfile

步骤六:验证是否启用成功

swapon --show

3.2 增加现有分区的 swap 空间

如果你使用分区来管理 swap,可以通过增加分区或调整分区大小来扩展 swap 空间:

步骤一:创建分区

略,使用分区工具(如 fdiskgparted)创建一个新的分区并设置其类型为 swap

步骤二:创建文件系统

sudo mkswap /dev/sdX

(将 /dev/sdX 替换为新创建分区的设备名称。)

步骤三: 启用分区

sudo swapon /dev/sdX

4. 永久生效

无论是增加 swap 文件还是分区,都需要在 /etc/fstab 中添加相应的配置,确保系统重启后 swap 能自动启用。

注:如果是临时,那就不需要进行永久生效的fstab配置。

步骤一:编辑 /etc/fstab

sudo nano /etc/fstab

步骤二:添加以下内容

  • 如果是 swap 文件:
    /swapfile none swap sw 0 0
    
  • 如果是 swap 分区:
    /dev/sdX none swap sw 0 0
    

保存并退出。

步骤三:调整 swappiness

在增加 swap 空间后,可以根据需求调整 swappiness 参数,控制系统使用 swap 的频率:

sudo sysctl vm.swappiness=10

如需永久修改,在 /etc/sysctl.conf 文件中添加:

vm.swappiness=10

步骤四:命令验证配置情况

free -h
swapon --show

5. 总结

使用 swap 空间有一定的优缺点,下面是它们的对比列表:

注:其他暂时没有想到的,就没有写,如果大家有想到的,请评论指点,谢谢!

优点 (Advantages)

优点说明
避免内存溢出当物理内存不足时,swap 可以提供额外的虚拟内存,防止程序崩溃或系统崩溃。
提升稳定性通过将不活跃的页面移到 swap 空间,可以释放物理内存,避免系统因内存不足而挂起。
缓存未用页面将不常用的数据移到 swap,使系统能够将更多内存分配给活跃的应用程序。
节省物理资源允许更多的程序同时运行,即使物理内存已经接近满负荷。
适用低内存设备在低内存或嵌入式设备上,swap 提供了补充的内存来源,能让系统在负载较重时正常运行。
可扩展性可以根据需求调整 swap 文件或分区的大小,相对灵活。

缺点 (Disadvantages)

缺点说明
性能下降swap 空间通常位于磁盘或 SSD 上,访问速度比物理内存慢得多。因此,频繁使用 swap 会显著降低系统性能,尤其是在使用传统机械硬盘时。
磁盘磨损(对 SSD 的影响)对于使用 SSD 的系统,频繁的写入操作可能会加速 SSD 的磨损。虽然现代 SSD 的耐久性已大幅提高,但仍需注意。
增加 I/O 负载当系统开始使用 swap,磁盘 I/O 活动会显著增加,可能影响其他 I/O 密集型任务的性能。
过度依赖 swap 会导致卡顿如果系统长时间依赖 swap,尤其是在内存不足的情况下,可能会导致系统变得非常缓慢或卡顿,影响用户体验。
难以预测的延迟访问 swap 的延迟是不可预测的,尤其在繁忙的系统中,可能导致时延波动。
系统重启后可能无法恢复当系统重新启动时,swap 中的数据会丢失。如果应用程序或服务依赖于 swap 中的数据(例如某些缓存或缓存管理),重启后可能会出现问题。

  • 适用场景swap 适用于内存有限、负载较高、需要避免系统崩溃的场景(例如服务器、虚拟机、低配置设备等)。但如果系统经常依赖 swap,可能会导致性能瓶颈,尤其在需要高性能计算时。
  • 不适用场景:如果系统的内存充足且性能要求较高(例如游戏、图形渲染、大型数据库等),应该避免过度使用 swap,以确保性能。

产品角度,应该合理场景化分析,经过压力和模拟测试,提供最有配置解决方案,同时保留冗余情况下,增加告警以及日志记录功能,确保能在极其苛刻的情况下记录现场环境。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词