linux Swap 分区

embedded/2025/3/16 11:33:07/

Swap 分区在 Linux 系统中的作用

Swap 分区(交换分区)相当于虚拟内存,在物理内存(RAM)不够用时,系统会将一部分磁盘空间作为虚拟内存使用。主要作用如下:

  • 缓解内存不足:当物理内存耗尽时,系统会将部分进程数据临时存放在 Swap 以防止系统崩溃。
  • 休眠(Hibernate)支持:部分 Linux 发行版支持系统休眠(suspend-to-disk),需要足够的 Swap 来存储 RAM 中的数据。
  • 缓存和后台进程管理:当某些进程长时间未被访问,内核可能会将其数据移入 Swap,以释放 RAM 给更活跃的任务。

Swap 分区的大小建议

Swap 分区的大小通常与系统 RAM 相关,推荐配置如下:

物理内存(RAM)Swap 推荐大小(桌面系统)Swap 推荐大小(服务器
小于 2GB物理内存的 2 倍物理内存的 2 倍
2GB - 8GB物理内存的 1.5 倍物理内存的 1~2 倍
8GB - 16GB物理内存的 1 倍物理内存的 1~2 倍
16GB 以上4GB~8GB物理内存的 0.5~1 倍
休眠模式至少等于 RAM 大小至少等于 RAM 大小

如果服务器高性能数据库高 I/O 负载应用(如 NoSQL),尽量减少 Swap,以避免磁盘 I/O 影响性能。


如何创建和管理 Swap

1. 创建 Swap 分区(传统方式)

如果系统安装时没有创建 Swap 分区,可以手动创建:

# 查看当前分区信息
lsblk
fdisk -l# 创建新的 Swap 分区(假设 /dev/sdb1 为空闲分区)
mkswap /dev/sdb1  # 格式化为 swap
swapon /dev/sdb1  # 启用 swap# 持久化配置(编辑 /etc/fstab)
echo '/dev/sdb1 swap swap defaults 0 0' >> /etc/fstab
2. 使用 Swap 文件代替 Swap 分区

如果磁盘已经分区完成,但需要增加 Swap,可以使用 Swap 文件:

# 创建 2GB 的 Swap 文件
sudo fallocate -l 2G /swapfile  # 也可以用 dd 命令: sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
sudo chmod 600 /swapfile  # 确保安全性
sudo mkswap /swapfile  # 创建 Swap 文件
sudo swapon /swapfile  # 启用 Swap# 持久化配置(编辑 /etc/fstab)
echo '/swapfile swap swap defaults 0 0' >> /etc/fstab
3. 调整 Swap 交换策略

Linux 通过 swappiness 参数控制 Swap 交换策略,值范围是 0~100

  • swappiness=0:尽量避免使用 Swap(适用于大内存服务器)。
  • swappiness=10-30:适用于普通桌面或服务器(默认通常是 60)。
  • swappiness=60+:系统更积极地使用 Swap(适用于低内存设备)。

查看当前 swappiness 值:

cat /proc/sys/vm/swappiness

临时修改(重启后失效):

sudo sysctl vm.swappiness=10

永久修改(重启后生效):

echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p  # 使修改生效

Swap 相关命令

命令作用
swapon -s查看当前 Swap 使用情况
free -m显示内存和 Swap 使用情况
swapoff /dev/sdX关闭某个 Swap 分区
swapoff -a关闭所有 Swap
swapon -a启用所有 Swap
`cat /proc/meminfogrep Swap`

总结

  • 桌面系统:如果 RAM 大于 16GB,Swap 可以设小一些(4GB~8GB)。
  • 服务器:建议至少 1 倍 RAM,尤其是数据库和虚拟机环境。
  • 休眠功能:Swap 需大于或等于 RAM 大小。
  • 调整 swappiness 以优化性能,避免不必要的磁盘 I/O。

增加 Swap分区

增加 Swap 分区的方式主要有两种:

  1. 扩展现有的 Swap 分区(如果有未使用的磁盘空间)。
  2. 创建新的 Swap 文件(适用于无法调整分区的情况)。

方法 1:扩展 Swap 分区(适用于已有 Swap 分区)

如果你当前的 Swap 是一个独立分区,并且磁盘有剩余空间,可以按照以下步骤进行扩展。

步骤 1:关闭当前 Swap

先检查 Swap 设备:

swapon --show

然后关闭当前 Swap:

sudo swapoff -a

步骤 2:调整 Swap 分区

查看磁盘信息:

sudo fdisk -l

如果你有未分配的磁盘空间,可以使用 fdiskparted 进行扩展:

sudo fdisk /dev/sdX  # 选择你的 Swap 分区所在磁盘

删除现有的 Swap 分区并重新创建一个更大的分区(数据会丢失,谨慎操作)。

使用 resize2fs(对于某些文件系统,如 ext4)或 parted 命令进行调整。

步骤 3:格式化新的 Swap 分区

sudo mkswap /dev/sdXn  # 重新格式化 Swap 分区(例如 /dev/sda3)
sudo swapon /dev/sdXn  # 重新启用 Swap

步骤 4:更新 /etc/fstab

编辑 /etc/fstab,确保 Swap 分区挂载信息正确:

/dev/sdXn swap swap defaults 0 0

然后执行:

sudo mount -a

方法 2:使用 Swap 文件增加 Swap(推荐,安全、不影响分区)

如果你不想修改已有的 Swap 分区,可以直接增加 Swap 文件,这种方法不会影响系统现有分区布局。

步骤 1:检查当前 Swap

free -m
swapon --show

步骤 2:创建 Swap 文件

假设你想增加 4GB Swap,执行:

sudo fallocate -l 4G /swapfile  # 创建 4GB 空间的 Swap 文件

(如果 fallocate 命令不可用,可以使用 dd 命令)

sudo dd if=/dev/zero of=/swapfile bs=1M count=4096  # 创建 4GB 文件

步骤 3:设置权限

确保只有 root 用户能访问:

sudo chmod 600 /swapfile

步骤 4:格式化 Swap 文件

sudo mkswap /swapfile

步骤 5:启用 Swap 文件

sudo swapon /swapfile

步骤 6:永久生效

编辑 /etc/fstab,添加以下内容:

/swapfile swap swap defaults 0 0

然后执行:

sudo mount -a

步骤 7:调整 Swap 策略(可选)

检查当前 swappiness 值:

cat /proc/sys/vm/swappiness

如果值较高(如 60),可以降低它(推荐 10~30,减少对 Swap 的依赖):

echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

方法 3:增加多个 Swap 文件

如果需要进一步增加 Swap,可以创建多个 Swap 文件:

sudo fallocate -l 2G /swapfile2
sudo chmod 600 /swapfile2
sudo mkswap /swapfile2
sudo swapon /swapfile2

并添加到 /etc/fstab

/swapfile2 swap swap defaults 0 0

如何验证 Swap 是否增加成功?

free -m   # 显示 Swap 总大小
swapon --show  # 显示 Swap 设备信息
cat /proc/swaps  # 查看 Swap 详细信息

总结

修改分区(方法 1)

  • 适用于已有 Swap 分区并且有多余磁盘空间。
  • 需要重建分区,风险较高,适合安装系统时操作。

增加 Swap 文件(方法 2,推荐)

  • 适用于任何情况,尤其是磁盘分区已满时。
  • 操作简单、安全,不影响现有分区。

http://www.ppmy.cn/embedded/173051.html

相关文章

内网渗透之内网基础知识(一)

工作组 工作组:工作组是局域网中的一个概念,他是长久的资源管理模式。默认情况下使 用工作组方式进行资源管理,将不同的 computer 按照不同的要求分类到不同的组 域:用来描述一种架构,和“工作组”相对应,由工作组升级而来的高级…

Winfrom基础知识41-60

41. 如何实现自定义控件的复杂绘制? 答案: 继承 Control 类并重写 OnPaint 方法,使用 Graphics 对象进行复杂绘制。 示例: public class CustomGraph : Control {protected override void OnPaint(PaintEventArgs e){base.OnPa…

TCP/IP原理详细解析

前言 TCP/IP是一种面向连接,可靠的传输,传输数据大小无限制的。通常情况下,系统与系统之间的http连接需要三次握手和四次挥手,这个执行过程会产生等待时间。这方面在日常开发时需要注意一下。 TCP/IP 是互联网的核心协议族&…

docker指令整理

以下是 Docker 常用指令的归纳整理,涵盖镜像管理、容器操作、网络配置、数据卷等核心场景,方便快速查阅: 一、镜像管理 命令说明示例docker pull拉取镜像docker pull nginx:latestdocker push推送镜像到仓库docker push my-registry.com/my-…

C++:二分习题

1. 借教室 503. 借教室 - AcWing题库 在大学期间,经常需要租借教室。 大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室。 教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。  面对海…

OpenHarmony 5.0 MP4封装的H265视频播放失败的解决方案

问题现象 OpenHarmony 5.0版本使用AVPlayer播放MP4封装格式的H.265(HEVC)编码格式的视频时解码失败导致播放失败 问题原因 OpenHarmony 5.0版本AVPlayer播放器使用histreamer引擎,因为 libav_codec_hevc_parser.z.so 动态库未开源导致从MP4封装中分离的HVCC格式的…

CVPR-2025 | 长程视觉语言导航平台与数据集:迈向复杂环境中的智能机器人

作者:Xinshuai Song, Weixing Chen, Yang Liu, Weikai Chen, Guanbin Li, Liang Lin 单位:中山大学,Independent Researcher,鹏城实验室 项目主页:https://hcplab-sysu.github.io/LH-VLN 论文地址:https…

2025-3-13 leetcode刷题情况(贪心算法--区间问题)

一、763.划分字母区间 1.题目描述 2.代码 3.思路 统计每一个字符最后出现的位置从头遍历字符,并更新字符的最远出现下标,如果找到字符最远出现位置下标和当前下标相等了,则找到了分割点 二、56.合并区间 1.题目描述 2.代码 3.思路 先排序…