当前位置: 首页 > news >正文

线上机器 swap 过高导致告警

哈喽大家好,我是咸鱼。

今天收到了一个告警,说有台服务器上的 swap 过高,已经用了 50% 以上了。
swap 使用率超过 50%

登录机器查看一下内存以及 swap 的使用情况。

[root@localhost ~]# free -h
total        used        free      shared  buff/cache   available
Mem:    62G         27G        2.9G        568M         32G         33G
swap:   16G        8.3G        8.1G

可以看到还有 2.9G 的空闲物理内存,但是系统已经开始使用 swap 了,初步判断是机器上面的程序内存需求比较大,但物理内存不够用所以开始使用 swap 来存储部分数据。

什么是 swap

swap 顾名思义指的是 Linux 上的交换分区,有点像 Windows 的虚拟内存,说白了就是把一块磁盘空间或者一个本地文件当成内存来使用

在早期内存价格昂贵的时代,swap 的出现解决了物理内存不足导致无法运行程序的问题。

swap 包含换出和换入两个过程:

  • 换出:把进程暂时不用的内存数据存储到磁盘中,并释放这些数据占用的内存。
  • 换入:进程再次访问这些内存数据时,把它们从磁盘读到内存来。

那现在随着内存越来越便宜,服务器上面的内存也越来越大,swap 是不是就没啥作用了呢?

不是的,对于程序来说,内存再大也有不够用的时候。比如说内存不足的时候,有些程序不希望被 OOM 杀死,而是希望等待一段时间让人工来处理,或者等系统自动释放其他进程的内存之后再分配给它。

又比如我们常见的笔记本电脑的休眠和快速开机的功能确实是基于 swap 的。在休眠时,操作系统会将当前内存的状态保存到交换空间或者称为休眠文件中,然后关闭计算机。当再次开机时,系统可以直接从休眠文件中恢复内存状态,而不需要重新加载应用程序和初始化系统,从而实现了快速开机的功能。

在 Linux 中,/proc/sys/vm/swappiness 用来调整使用 swap 的积极程度。swappiness 的范围是 0-100,数值越大,越积极使用 swap。一般来讲默认值是 60 。

需要注意的是:这个范围是 swap 积极程度的权重,即使我们设置成 0,在某些情况下(例如进程可用内存耗尽了)还是会使用 swap 的。

排查过程

首先我们来看下 swap 的积极程度。

[root@localhost ~]# cat /proc/sys/vm/swappiness
60

swappiness 显示的是默认值 60,这是一个相对中和的配置,所以系统会根据实际情况来选择是回收可用缓存以增加可用内存空间,还是使用交换空间来增加可用内存空间。

接下来我们要找出是哪些进程使用到了 swap。在 Linux 中,可以用 proc 文件系统来查看进程 swap 换出的虚拟内存大小,它保存在 /proc/pid/status 的 Vmswap 字段中。

但是一台服务器中有这么多进程,一个一个找太麻烦了,所以我们可以使用下面的命令来找出当前系统中 swap 占用最大的几个进程,并列出它们的进程号、进程名和 swap 大小。

[root@localhost ~]# for file in /proc/*/status ; do awk '/Vmswap|Name|^Pid/{printf $2 " " $3}END{ print ""}' $file; done | sort -k 3 -n -r | head
java 153707 3245376 kB
java 153544 1757916 kB
java 172612 732100 kB
java 323072 339756 kB
java 172807 161988 kB
  1. for file in /proc/*/status ; do ... done:这是一个 for 循环,它遍历了 /proc 目录下的所有子目录,每个子目录都包含一个名为 status 的文件,其中包含了该进程的一些状态信息。
  2. awk '/VmSwap|Name|^Pid/{printf $2 " " $3}END{ print ""}' $file:对于每个 /proc/*/status 文件,awk 命令用于匹配 VmSwapName 或者 Pid 这几个关键字,并输出它们的值。这些关键字分别表示交换空间、进程名和进程号。
  3. sort -k 3 -n -r:对输出的结果进行排序。-k 3 表示按第三列进行排序,即按照交换空间大小排序;-n 表示按照数字顺序排序;-r 表示逆序排序,即从大到小排序。
  4. head -5 :输出排序后的前5行。

从输出的结果可以看到,使用 swap 比较多的是 java 进程。

如何解决

在定位到是哪些进程使用 swap 比较高之后,我们找到对应的开发同事进行讨论,最后**决定把 swap 关掉。**通常来讲,降低 swap 的使用,可以提高系统的整体性能。

一方面是因为频繁地进行 swap 操作,会导致大量的磁盘读写操作,降低系统的响应速度和整体性能。

另一方面是因为频繁地将数据从内存交换到 swap 空间,并在需要时再次交换回来时,会增加 CPU 和内存的负担。

如何关闭 swap ?

首先使用 swapoff 命令关闭当前正在使用的交换空间。

[root@localhost ~]# swapoff -a

然后我们看下 swap 空间是否已经关闭,如果输出为空则表示 swap 成功关闭。

[root@localhost ~]# cat /proc/swaps

需要注意的是,前面的 swap 关闭操作只是临时关闭,如果机器重启是会重新开启 swap 的。

所以为了下一次重启机器后 swap 还是关闭状态我们还要编辑 /etc/fstab 文件,将其中关于 swap 的配置注释掉或者删除掉。

# 找到以 swap 标识的行,然后注释
[root@localhost ~]# vim /etc/fstab
# /dev/mapper/centos-swap swap                    swap

这样如果机器后面要是重启了,swap 依旧是关闭状态。

相关文章:

线上机器 swap 过高导致告警

哈喽大家好,我是咸鱼。 今天收到了一个告警,说有台服务器上的 swap 过高,已经用了 50% 以上了。 登录机器查看一下内存以及 swap 的使用情况。 [rootlocalhost ~]# free -h total used free shared buff/cache ava…...

案例分析篇13:系统分析与设计考点(2024年软考高级系统架构设计师冲刺知识点总结系列文章)

专栏系列文章推荐: 2024高级系统架构设计师备考资料(高频考点&真题&经验)https://blog.csdn.net/seeker1994/category_12593400.html 【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】(2024年软考高级系统架构设计师冲刺知识点总结-案例分析篇-…...

算法(结合算法图解)

算法简介简单查找二分查找法 选择排序内存的工作原理数组和链表数组选择排序小结 递归小梗 要想学会递归,首先要学会递归。 递归的基线条件和递归条件递归和栈小结 快速排序分而治之快速排序合并排序时间复杂度的平均情况和最糟情况小结 散列表散列函数缓冲小结性能…...

Linux-多线程

目录 线程概念线程控制创建退出等待join实例detach实例 实例 线程安全概念互斥同步生产者与消费者模型实例 信号量 线程应用 线程概念 线程概念: 有一个零件加工工厂,工厂中有一个或多个工人 工人是干活的,工厂是集体设备资源的载体 进程就是…...

深入解析C++树形关联式容器:map、set及其衍生容器的使用与原理

文章目录 一、引言二、关联式容器的中的 paira.pair 的创建及使用b.pair 间的比较 三、 map 与 set 详解1. map 的基本操作2. set 的基本操作3.关联式容器的迭代器 四、 multimap 与 multiset 的特性五、关联式容器的使用技巧与注意事项1. 键值类型的选择与设计2. 自定义比较函…...

c++基础知识(一)

C字符集:通常将一个标准中能够表示所有字符的一个集合称为字符集。例如Unicode字符集、ASCll、GB2312、BIG5(繁体中文及其相关字符)等。 字符集是组成程序设计语言的基本要素。由单字符、关键字、标识符、运算符(操作符&#xff…...

Midjourney绘图欣赏系列【人物篇】(一)

Midjourney介绍 Midjourney 是生成式人工智能的一个很好的例子,它根据文本提示创建图像。它与 Dall-E 和 Stable Diffusion 一起成为最流行的 AI 艺术创作工具之一。与竞争对手不同,Midjourney 是自筹资金且闭源的,因此确切了解其幕后内容尚不…...

2024 年 2 月 NFT 行业动态:加密货币飙升,NFT 市场调整

作者:stellafootprint.network 数据来源:NFT 研究页面 - Footprint Analytics 2024 年 2 月,加密货币与 NFT 市场显现出了复杂性。该月,NFT 领域的交易量达到 12 亿美元,环比下降了 3.7%。值得关注的是,包…...

【C++那些事儿】深入理解C++类与对象:从概念到实践(下)| 再谈构造函数(初始化列表)| explicit关键字 | static成员 | 友元

📷 江池俊:个人主页 🔥 个人专栏:✅C那些事儿 ✅Linux技术宝典 🌅 此去关山万里,定不负云起之望 文章目录 1. 再谈构造函数1.1 构造函数体赋值1.2 初始化列表1.3 explicit 关键字 2. static成员2.1 概念…...

前端面试 ===> 【Vue2】

Vue2 相关面试题总结 1. 谈谈对Vue的理解 Vue是一种用于构建用户页面的渐进式JavaScript框架,也是一个创建SPA单页面应用的Web应用框架,Vue的核心是 数据驱动试图,通过组件内特定的方法实现视图和模型的交互;特性:&a…...

面试 Java 并发编程八股文十问十答第四期

面试 Java 并发编程八股文十问十答第四期 作者:程序员小白条,个人博客 相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新! ⭐点赞⭐收藏⭐不迷路!⭐ 1)Java 中你怎样唤醒…...

物体检测-系列教程27:YOLOV5 源码解析17(训练脚本解读:训练函数4)

😎😎😎物体检测-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 点我下载源码 24、epoch循环训练------更新、评估、保存 这部分是训练过程的每个epoch结束之前执行的一…...

基于51单片机的数字时钟(万年历)设计与实现

基于51单片机的数字时钟(万年历)设计与实现 摘要 随着科技的不断发展,数字时钟已成为人们日常生活中不可或缺的一部分。基于51单片机的数字时钟(万年历)设计,结合了传统时钟的功能与现代电子技术&#xf…...

2024年谷歌SEO的趋势预测及应对建议(川圣SEO)蜘蛛池

baidu搜索:如何联系八爪鱼SEO? baidu搜索:如何联系八爪鱼SEO? baidu搜索:如何联系八爪鱼SEO? 虽然说“SEO”已死这个口号已经喊了很多年了(最终也没死),但是在2023年很…...

Rust 生命周期符号使用的方法和规律

一、生命周期符号使用的规律 在 Rust 中,生命周期(lifetimes)是用于处理引用和所有权问题的关键概念。生命周期符号(通常表示为 a、b 等)用于指定引用的有效时间范围。这有助于编译器确保在引用被使用时,所…...

生成哈夫曼树(100%用例)C卷(JavaPythonC++Node.jsC语言)

给定长度为n的无序的数字数组,每个数字代表二叉树的叶子节点的权值,数字数组的值均大于等于1。请完成一个函数,根据输入的数字数组,生成哈夫曼树,并将哈夫曼树按照中序遍历输出。 为了保证输出的二又树中序遍历结果统一,增加以下限制:二叉树节点中,左节点权值小于等于右…...

el-form-item内的el-select如何自适应宽度

最近在使用element-ui做后台管理的时候,有个需求是在弹窗组件里面,添加一个el-select下拉框选项,但是给el-select设置的宽度无法自适应,原因很简单,我们不需要设置固定宽度,设置百分比就行了,让…...

什么洗地机值得推荐?旗舰洗地机希亦、追觅、西屋、海尔实际表现如何?

洗地机这个产品相信大家已经不陌生了,它集合吸尘器和电动扫地拖把的功能,轻轻推拉便可以解决地面上的赃物,且不用我们手动清洗滚刷,深得家务人的喜爱,可是,当我们真正要去选购的时候,还是很纠结…...

掘根宝典之C++隐式类型转化(整型提升,算术转换)

赋值中的隐式转换 话不多说,我们直接看例子 bool b42; //b为真 int ib; //i的值为1 i3.14; //i的值为3 double pi i; // pi的值为3.0 unsigned char c -1; // 假设char占8比特,c的值为255 s…...

group by order by having where union

力扣题目链接 having where 区别 having子句用于分组后筛选,where子句用于行条件筛选 having一般都是配合group by 和聚合函数一起出现如(count(),sum(),avg(),max(),min()) where条件子句中不能使用聚集函数,而having子句就可以。 having只能用在group…...

Rydberg原子量子门实现原理与优化技术

1. Rydberg原子平台中的量子门实现基础1.1 Rydberg原子特性与量子计算优势Rydberg原子是指外层电子被激发到高主量子数能级的原子态,这类原子具有三个关键特性使其成为量子计算的理想平台:强偶极-偶极相互作用:当两个原子同时处于Rydberg态时…...

2026 西安 AI 问答曝光搭建技术解析:GEO 知识图谱 + 深度测评

随着大语言模型技术的快速普及,AI 搜索已经成为用户获取企业信息、商家服务的核心入口。根据中国互联网信息中心 2026 年发布的《中国人工智能搜索发展报告》显示,2025 年国内 AI 搜索用户规模突破 8.2 亿,日均搜索请求超过 20 亿次&#xff…...

别只拿PotPlayer看片了!挖掘它的采集录制功能,做Switch游戏存档大师

别把PotPlayer当普通播放器!解锁它的Switch游戏录制黑科技 你是否已经厌倦了在OBS、Bandicam等专业录制软件中反复调试参数的繁琐?是否想过那个每天用来看视频的PotPlayer,其实隐藏着令人惊喜的游戏录制能力?今天,我们…...

基于声卡与电流互感器的安全交流功率测量系统设计与实践

1. 项目概述:用声卡安全测量交流功率我一直对各种测量技术抱有浓厚的兴趣,毕竟“测量即认知”这句老话在今天依然适用。对于电力消耗和产出,没有什么比直接测量更能说明问题了。交流功率的测量,核心在于同时获取电压和电流的瞬时值…...

1901-2022年中国气温变化分析实战:用这份1km栅格数据我们能发现什么?

1901-2022年中国气温变化分析实战:如何从1km栅格数据中挖掘气候演变规律当一份覆盖122年、分辨率精确到1公里的气温栅格数据摆在面前时,我们看到的不仅是数字矩阵,更是一部写在经纬度坐标里的气候变迁史诗。这份由逐月数据聚合生成的逐年气温…...

Postgresql基础实践教程(九)

⭐️⭐️⭐️⭐️⭐️ 完整数据详见 练习数据免费 ⭐️⭐️⭐️⭐️⭐️ 七十二、WITH查询(公用表表达式CTE) 1. SELECT 中的 WITH 2. 递归查询 3. 公用表表达式的物化 4. WITH中的数据修改语句 WITH提供了一种在主查询中写辅助语句的方法。这些语…...

AhMyth位置跟踪:GPS定位与地理围栏技术深度解析

AhMyth位置跟踪:GPS定位与地理围栏技术深度解析 【免费下载链接】AhMyth Cross-Platform Android Remote Administration Tool | The only maintained version of AhMyth on github | A revival of the original repository at https://GitHub.com/AhMyth/AhMyth-An…...

反向海淘站点常见配置故障复盘与数据一致性优化方案

摘要反向海淘独立站运行过程中,容易出现价格换算异常、页面语种错乱、商品同步失败、订单状态停滞、运费计算偏差等问题。多数故障并非系统底层缺陷,而是配置逻辑理解偏差、数据规范不统一引发。本文结合实际运维场景,汇总高频故障成因&#…...

观察Taotoken在多模型聚合调用下的路由与失败重试效果

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 观察Taotoken在多模型聚合调用下的路由与失败重试效果 在构建依赖大模型能力的应用时,服务的稳定性是开发者关注的核心…...

如何让旧款Mac运行最新系统:OpenCore Legacy Patcher完整指南

如何让旧款Mac运行最新系统:OpenCore Legacy Patcher完整指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 想让你的老旧Mac设备重新焕发活力&a…...