Linux的交换区

Linux 交换区(Swap)详解

交换区(Swap)是 Linux 系统用于扩展内存的一种机制,它将部分磁盘空间虚拟成内存使用。当物理内存(RAM)不足时,系统会将不活跃的内存页移动到交换区,从而避免进程因内存不足(OOM)被强制终止。


1. 交换区的作用

  • 扩展可用内存:当 RAM 耗尽时,系统使用 Swap 作为后备存储。
  • 休眠(Hibernate)支持:休眠时,内存数据会保存到 Swap。
  • 减少 OOM 风险:避免系统因内存不足而崩溃。

2. 交换区的类型

类型说明
Swap 分区独立的磁盘分区(推荐方式,性能较好)
Swap 文件普通文件模拟的交换区(灵活,无需重新分区)
ZRAM基于内存的压缩交换(适用于内存较小设备,如嵌入式系统)

3. 查看当前交换区

free -h              # 查看内存和 Swap 使用情况
swapon --show        # 查看活跃的 Swap 设备
cat /proc/swaps      # 查看 Swap 详细信息

输出示例

              total        used        free      shared  buff/cache   available
Mem:           7.7G        2.1G        3.2G        345M        2.4G        5.0G
Swap:          2.0G        0B          2.0G

4. 创建交换区

(1) 创建 Swap 文件(推荐)

# 1. 创建空文件(大小 4GB)
sudo fallocate -l 4G /swapfile# 2. 设置权限(仅 root 可读写)
sudo chmod 600 /swapfile# 3. 格式化为 Swap
sudo mkswap /swapfile# 4. 启用 Swap
sudo swapon /swapfile# 5. 永久生效(写入 /etc/fstab)
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

(2) 创建 Swap 分区

# 1. 使用 fdisk/gdisk 创建新分区(类型为 Linux Swap)
# 2. 格式化
sudo mkswap /dev/sdXN   # 替换为实际分区(如 /dev/sdb1)# 3. 启用
sudo swapon /dev/sdXN# 4. 写入 /etc/fstab
echo '/dev/sdXN none swap sw 0 0' | sudo tee -a /etc/fstab

5. 调整交换区使用策略

Linux 通过 swappiness 控制 Swap 使用频率(范围 0-100):

  • 0:尽量不使用 Swap(除非内存耗尽)。
  • 100:积极使用 Swap(可能降低性能)。

查看当前值

cat /proc/sys/vm/swappiness

临时修改

sudo sysctl vm.swappiness=10

永久修改

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

6. 删除交换区

(1) 禁用 Swap 文件

sudo swapoff /swapfile
sudo rm /swapfile
sudo sed -i '/\/swapfile/d' /etc/fstab

(2) 禁用 Swap 分区

sudo swapoff /dev/sdXN
sudo sed -i '/\/dev\/sdXN/d' /etc/fstab

7. 交换区大小建议

物理内存(RAM)推荐 Swap 大小
≤ 2GBRAM × 2
2GB–8GB等于 RAM 大小
8GB–64GBRAM × 0.5(至少 4GB)
≥ 64GB4GB(或不用 Swap)

8. 性能优化

  • 优先使用 Swap 分区(比文件性能高 5%~10%)。
  • SSD 比 HDD 更适合 Swap(减少延迟)。
  • 避免过度使用 Swap(频繁交换会拖慢系统)。

9. 常见问题

(1) Swap 使用率过高

  • 原因:物理内存不足,系统频繁换页。
  • 解决:增加 RAM 或优化应用内存占用。

(2) 休眠(Hibernate)失败

  • 原因:Swap 空间小于 RAM。
  • 解决:确保 Swap ≥ RAM 大小。

(3) swapon 报错 “invalid argument”

  • 原因:Swap 文件未正确格式化。
  • 解决:重新运行 mkswap

10. 总结

操作命令
创建 Swap 文件fallocate → mkswap → swapon
启用现有 Swapswapon /swapfile
禁用 Swapswapoff /swapfile
调整 swappinesssysctl vm.swappiness=10

合理配置 Swap 可提升系统稳定性,但不能替代物理内存! 🚀

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阅读笔记——理解什么是LLM大语言模型

阅读笔记: 理解LLM deepseek创新了什么 什么是多模态 什么是token ​​ 定义​​:Token是LLM处理文本的最小单位,相当于语言的"原子"​​类比​​: 中文:1个token ≈ 1个汉字或常见词(如"…

(自用)Java学习-5.14(注册,盐值加密,模糊查询)

一、核心功能实现 1. 用户注册功能 前端实现 用户名实时校验:通过AJAX异步请求检查用户名是否已存在。 function checkName() {$.ajax({url: /users/checkUserName?uname uname,success: function(resp) {if (resp.code 200) alert("用户名可用");el…

【杂谈】STM32使用快速傅里叶变换库函数后如何比较准确地找到n次谐波幅值

目录 1.简单介绍傅里叶变换的作用 2.谐波是什么 3.解决方法 1.简单介绍傅里叶变换的作用 任何复杂的波形归根结底都是由多个频率和相位不一样的正弦波组成的 通过傅里叶变换可以找到组成一个复杂的波形的所有正弦波的频率和幅度信息 2.谐波是什么 假设有一个复杂的波形&a…

芯科科技推出首批第三代无线开发平台SoC,高度集成的解决方案推动下一波物联网实现突破

SiXG301和SiXG302是芯科科技采用22纳米工艺节点推出的首批无线SoC系列产品,在计算能力、功效、集成度和安全性方面实现突破性进展 低功耗无线解决方案领导性创新厂商Silicon Labs(亦称“芯科科技”,NASDAQ:SLAB)近日宣…

写作即是生活

一个问题 “我是什么时候开始写作的呢?”请你先暂停一下,别往下读,先想想这个问题。 什么才是写作? 或许在想上个问题之后,你就会开始想问另外一个问题,什么才算是写作呢? 我的回答是&#x…

SpringBoot 执行Lua脚本 服务端执行 减少性能损耗 优化性能 优化连接性能

介绍 通过 Redis 执行 Lua 脚本时,所有的操作都在服务器端完成,而不是多次通过网络进行请求。这可以显著减少网络延迟,尤其是在需要多次与 Redis 交互的场景中。多个操作可以在 Lua 脚本中组合成一个操作,而不是分多次请求&#…

Nginx代理、缓存与Rewrite

目录 一、正向代理 (一)核心概念与应用场景 (二)Nginx正向代理编译安装(以OpenEuler为例) (三)验证正向代理 二、反向代理 (一)七层代理(HT…

PortSwigger-02-XXE

一:漏洞原理 1、XXE XXE全称xml外部实体注入 XML:是一种用于标记电子文件使其具有结构性的标记语言,提供统一的方法来描述和交换独立于应用程序或者供应商的结构化数据,它可以用来标记数据,定义数据类型、是一种允许…

常规算法学习

算法 1. 排序算法1. 归并排序1.1 普通归并排序1.2 优化后的归并排序(TimSort) 2. 插入排序2.1 直接插入排序2.2 二分插入排序2.3 成对插入排序 3. 快速排序3.1 单轴快速排序3.2 双轴快排 4. 计数排序 2. 树1. 红黑树(Red Black Tree&#xff…

关于线程死锁的相关知识

前言 今天学习了线程死锁的相关知识。线程死锁是非常重要的知识,写成博客,加深自己对于知识的理解。 线程死锁 结语 希望可以帮助到大家~

EMQX启用单向认证的SSl/TLS连接的配置步骤

先确保您已经安装了 OpenSSL 执行openssl version -a 获取 openssl.cnf 目录 生成自签名服务端证书 CA 证书生成 server-ca.crt openssl req \-new \-newkey rsa:2048 \-days 365 \-nodes \-x509 \-subj "/CCN/OEMQ Technologies Co., Ltd/CNEMQ CA" \-keyout s…

依赖nacos实例动态创建线程池并监听服务上下线

版本 Spring Booot 版本 3.2.4Spring Cloud 版本 2023.0.1Spring Cloud Alibaba 版本 2023.0.1.2 依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </depe…

全面指南:使用Node.js和Python连接与操作MongoDB

在现代Web开发中&#xff0c;数据库是存储和管理数据的核心组件。MongoDB作为一款流行的NoSQL数据库&#xff0c;以其灵活的数据模型、高性能和易扩展性广受开发者欢迎。无论是使用Node.js还是Python&#xff0c;MongoDB都提供了强大的官方驱动和第三方库&#xff0c;使得数据库…

LeetCode 3068.最大节点价值之和:脑筋急转弯+动态规划(O(1)空间)

【LetMeFly】3068.最大节点价值之和&#xff1a;脑筋急转弯动态规划&#xff08;O(1)空间&#xff09; 力扣题目链接&#xff1a;https://leetcode.cn/problems/find-the-maximum-sum-of-node-values/ 给你一棵 n 个节点的 无向 树&#xff0c;节点从 0 到 n - 1 编号。树以长…

HTTPS加密通信详解及在Spring Boot中的实现

HTTPS&#xff08;Hyper Text Transfer Protocol Secure&#xff09;是HTTP的安全版本&#xff0c;通过SSL/TLS协议为通讯提供加密、身份验证和数据完整性保护。 一、HTTPS核心原理 1.加密流程概述 客户端发起HTTPS请求&#xff08;连接到服务器443端口&#xff09;服务器返…

解决线程安全问题

前言 昨天学习了如何去解决线程不安全的问题。一般方法都是通过加锁来处理&#xff0c;跟大家分享一波 。 解决线程安全问题 结语 希望可以帮助到大家~ byebye

网络常识:网线和光纤的区别

网络常识&#xff1a;网线和光纤的区别 一. 介绍二. 网线2.1 什么是网线&#xff1f;2.2 网线的主要类别2.3 网线的优势2.4 网线的劣势 三. 光纤3.1 什么是光纤&#xff1f;3.2 光纤的主要类别3.3 光纤的优势3.4 光纤的劣势 四. 网线 vs 光纤&#xff1a;谁更适合你&#xff1f…

win11 禁用/恢复 内置笔记本键盘(保证管用)

文章目录 禁用启用 禁用 1&#xff09;按下 win x&#xff0c;点击 设备管理器 2&#xff09;拔掉所有笔记本外设&#xff08;一定要都拔掉&#xff0c;不然后面禁用设备会混淆&#xff09;&#xff0c;然后右键点击 键盘 > HID Keyboard Device 2&#xff09;点击 更新…

Three.js搭建小米SU7三维汽车实战(5)su7登场

汽车模型加载 我们在sktechfab上下载的汽车是glb的文件格式&#xff0c;所以使用gltfLoader进行加载。这里将小车直接加载进来看看效果&#xff1b; import { GLTFLoader } from "three/addons/loaders/GLTFLoader.js"; ....其余代码省略 const gltfLoader new GLT…

ETL怎么实现多流自定义合并?

随着信息技术的迅猛发展以及数据生成环境的多样化&#xff0c;互联网、物联网和社交媒体的广泛应用导致各种设备和平台不断产生大量数据&#xff0c;需要整合这些数据&#xff0c;从而进行数据融合。数据集成和管理平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;…