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,以确保性能。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/943987.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

面试场景题系列:设计一致性哈希系统

为了实现横向扩展,在服务器之间高效和均匀地分配请求/数据是很重要的。一致性哈希是为了达成这个目标而被广泛使用的技术。首先,我们看一下什么是重新哈希问题。 1 重新哈希的问题 如果你有n个缓存服务器,常见的平衡负载的方法是使用如下哈希…

SqlSugar配置连接达梦数据库集群

安装达梦数据库时,会自动在当前操作系统中创建dm_svc.conf文件,可以在其中配置集群信息,不同操作系统下的文件位置如下图所示:   dm_svc.conf文件内的数据分为全局配置区域、服务配置区域,以参考文献1中的示例说明&…

scss配置全局变量报错[sass] Can‘t find stylesheet to import.

路径没有错误,使用别名即可 后又提示Deprecation Warning: Sass import rules are deprecated and will be removed in Dart Sass 3.0.0. 将import改为use 使用时在$前添加全局变量所在文件,即variable.

UGUI源码分析 --- UI的更新入口

首先所有的UI组件都是添加到画布(Canvas)显示的,所以首先要从Canvas入手,通过搜索脚本函数以及使用Profiler查看UI的函数的执行,定位到了willRenderCanvases函数 打开UI的文件夹, 通过搜索willRenderCanvas…

音视频入门知识(二)、图像篇

⭐二、图像篇 视频基本要素:宽、高、帧率、编码方式、码率、分辨率 ​ 其中码率的计算:码率(kbps)=文件大小(KB)*8/时间(秒),即码率和视频文件大小成正比 YUV和RGB可相互转换 ★YUV(原始数据&am…

电脑配置maven-3.6.1版本

不要使用太高的版本。 apache-maven-3.6.1-bin.zip 下载这个的maven压缩包 使用3.6.1版本。 解压缩放在本地软甲目录下面: 配置系统环境变量 在系统环境下面配置MAVEN_HOME 点击path 新增一条 在cmd中输入 mvn -v 检查maven的版本 配置阿里云镜像和本地的仓库 …

Python基础语法知识——数据类型的查询、数据类型转化

今天第一次学习python,之前学习过C,感觉学习起来还可以,就是刚用的时候有点手残,想的是python代码,结果写出来就是C,本人决定每天抽出时间写点。同时继续更新NX二次开发专栏学习,话不多说,晚上的…

Boost之log日志使用

不讲理论,直接上在程序中可用代码: 一、引入Boost模块 开发环境:Visual Studio 2017 Boost库版本:1.68.0 安装方式:Nuget 安装命令: #只安装下面几个即可 Install-package boost -version 1.68.0 Install…

C语言初阶习题【17】求N的阶乘( 递归和非递归实现)

1.题目 2.分析 非递归 需要用到循环,n个数就是循环n次,每次和之前的乘起来 例如 5的阶乘 就是 5*4 *3 *2 *1 循环1到5 。需要一个变量来接收每次的结果 注意这个地方是乘,所以要从1 开始,sum 也需要是1而不是0 for(i 1&#xf…

云效流水线自动化部署web静态网站

云效流水线部署静态网站 背景新建流水线配置流水线运行流水线总结 背景 配置流水线以前,每次更新导航网站都要登进去宝塔后台,删掉旧的目录和文件,再上传最新的文件,太麻烦啦 网上的博客基本都是分享vue项目,这一篇是…

【开源项目】数字孪生化工厂—开源工程及源码

飞渡科技数字孪生化工厂管理平台,基于自研孪生引擎,将物联网IOT、人工智能、大数据、云计算等技术应用于化工厂,为化工厂提供实时数据分析、工艺优化、设备运维等功能,助力提高生产效率以及提供安全保障。 通过可视化点位标注各厂…

SpringCloud整合skywalking实现链路追踪和日志采集

1.部署skywalking https://blog.csdn.net/qq_40942490/article/details/144701194 2.添加依赖 <!-- 日志采集 --><dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-logback-1.x</artifactId><version&g…

Linux下Nvidia显卡GPU开启驱动持久化

GPU开启驱动持久化的原因 GPU 驱动一直处于加载状态&#xff0c; 减少运行程序时驱动加载的延迟。不开启该模式时&#xff0c;在程序每次调用完 GPU 后&#xff0c; GPU 驱动都会被卸载&#xff0c;下次调用时再重新加载&#xff0c; 驱动频繁卸载加载&#xff0c; GPU 频繁被…

图像处理-Ch4-频率域处理

Ch4 频率域处理(Image Enhancement in Frequency Domain) FT &#xff1a;将信号表示成各种频率的正弦信号的线性组合。 频谱&#xff1a; ∣ F ( u , v ) ∣ [ R 2 ( u , v ) I 2 ( u , v ) ] 1 2 |F(u, v)| \left[ R^2(u, v) I^2(u, v) \right]^{\frac{1}{2}} ∣F(u,v)…

虚拟化 | Proxmox VE 8.x 开源的虚拟化平台快速上手指南

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] 0x00 简介说明 前言简述 描述:作为一个爱折腾的IT打工佬,时刻以学习各类新技术新知识为目标,这不正好有一台部署了VMware vSphere ESXi 虚拟化环境的服务器,由于正好安装其系统的磁盘有坏道,经常导致使用 ESXi 异…

rocketmq-push模式-消费侧重平衡-类流程图分析

1、观察consumer线程 使用arthas分析 MQClientFactoryScheduledThread 定时任务线程 定时任务线程&#xff0c;包含如下任务&#xff1a; 每2分钟更新nameServer列表 每30秒更新topic的路由信息 每30秒检查broker的存活&#xff0c;发送心跳请求 每5秒持久化消费队列的offset…

使用亚马逊针对 PyTorch 和 MinIO 的 S3 连接器实现可迭代式数据集

2023 年 11 月&#xff0c;Amazon 宣布推出适用于 PyTorch 的 S3 连接器。适用于 PyTorch 的 Amazon S3 连接器提供了专为 S3 对象存储构建的 PyTorch 数据集基元&#xff08;数据集和数据加载器&#xff09;的实现。它支持用于随机数据访问模式的地图样式数据集和用于流式处理…

[2003].第2-01节:关系型数据库表及SQL简介

所有博客大纲 后端学习大纲 MySQL学习大纲 1.数据库表介绍&#xff1a; 1.1.表、记录、字段 1.E-R&#xff08;entity-relationship&#xff0c;实体-联系&#xff09;模型中有三个主要概念是&#xff1a; 实体集 、 属性 、 联系集2.一个实体集&#xff08;class&#xff09…

wps透视数据表

1、操作 首先选中你要的行字段表格 -> 插入 -> 透视数据表 -> 拖动行值&#xff08;部门&#xff09;到下方&#xff0c;拖动值&#xff08;包裹数量、运费&#xff09;到下方 2、删除 选中整个透视数据表 -> delete 如图&#xff1a;

Python-流量分析常用工具脚本(Tshark,pyshark,scapy)

免责声明&#xff1a;本文仅作分享~ 目录 wireshark scapy 例&#xff1a;分析DNS流量 检查数据包是否包含特定协议层&#xff08;过滤&#xff09; 获取域名 例&#xff1a;提取 HTTP 请求中的 Host 信息 pyshark 例&#xff1a;解析 HTTP 请求和响应 例&#xff1a;分…