首页 游戏 软件 资讯 排行榜 专题
首页
系统平台
Linux如何查看哪些进程正在使用交换分区 常用脚本

Linux如何查看哪些进程正在使用交换分区 常用脚本

热心网友
29
转载
2026-04-25

直接看 /proc/$PID/smaps 中的 Swap: 行可获进程真实已换出 swap 量(单位 KB),需对所有 Swap: 行求和;常用管道命令可快速列出占用 swap 前十的用户进程

linux如何查看哪些进程正在使用交换分区 常用脚本

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈

直接看 /proc/$PID/smaps 里的 Swap 行

从 Linux 内核 2.6.16 版本开始,系统在 /proc/$PID/smaps 这个文件里,为每个进程提供了极其详尽的内存映射信息。其中,Swap: 这一行是关键,它明明白白地告诉你,对应的内存页此时此刻是不是真的被换出到了交换分区——注意,这里说的是“已经换出去”的实打实的用量(单位是KB),而不是“有可能被换出”的潜在部分。

这里有个容易踩的坑:一个进程往往有多个内存映射区域,比如堆、栈、各种共享库等等,每个区域都可能独立地拥有自己的 Swap: 值。所以,想得到这个进程真实的 swap 占用总量,你必须把所有这些区域的 Swap: 值加起来才行。

常见的错误做法是只抓取第一行或者漏掉几个区域。正确的姿势是使用命令:grep Swap /proc/$PID/smaps | awk '{sum += $2} END {print sum+0}'。末尾那个 +0 是个小技巧,目的是防止在 awk 没有匹配到任何内容时输出空值或报错。

用一行命令快速列出 top10 占用 swap 的进程

临时排查问题,谁也不想写冗长的脚本。下面这条经典的 shell 管道命令,就是为这种场景准备的,它能快速揪出占用 swap 最多的前十个“大户”:

for i in /proc/[0-9]*; do [ -f "$i/smaps" ] || continue; pid=$(basename $i); swap=$(awk '/^Swap:/ {sum += $2} END {print sum+0}' "$i/smaps" 2>/dev/null); [ "$swap" != "0" ] && echo "$pid $swap $(ps -p "$pid" -o comm= 2>/dev/null | tr -d '\n')"; done | sort -k2 -nr | head -10 | awk '{printf "%-8s %8s KB %s\n", $1, $2, $3}'

这条命令有几个设计巧妙的点,值得说道说道:

  • 使用 /proc/[0-9]* 来匹配进程目录,比先用 lsgrep 更安全直接,能避免误匹配到 /proc/sys 这类非进程目录。
  • [ -f "$i/smaps" ] 这个检查很关键,它能有效过滤掉那些已经退出、但目录还残留的僵尸进程。
  • 通过 ps -p "$pid" -o comm= 只获取简短的进程名,不包含路径,这样最终输出的格式会更整齐,不会因为路径长短不一而显得混乱。
  • 整个流程是:先计算 swap、收集信息,然后通过 sort -k2 -nr 按第二列(swap值)进行数字逆序排序,再用 head -10 取前十。这个“先排序后格式化”的顺序,比反过来要可靠得多。

注意 init 进程(PID 1)和内核线程的干扰

运行上面的命令时,你可能会遇到一些小麻烦。比如,/proc/1/smaps 这个文件虽然存在,但通常权限不允许读取。而那些内核线程,像 kthreaddkhungtaskd 等,它们的 /proc/$PID/smaps 文件倒是能读,但里面的 Swap: 值永远是0——原因很简单,内核线程根本用不到用户态的交换空间。

所以,一个健壮的脚本最好能把它们过滤掉:

  • 显式跳过 PID 1:在循环里加一句判断,[ "$pid" = "1" ] && continue
  • 跳过内核线程:内核线程的命令名通常以方括号 [ ] 包裹。可以用 ps -p "$pid" -o comm= 2>/dev/null | grep -q '^[a-z]' 来判断,如果命令名不是以小写字母开头,就忽略它。
  • 避免误操作:确保只对真正的进程目录执行 grep Swap 操作,否则如果跑到 /proc/sys 这类目录下去执行,不仅会报错,还会污染你的输出结果。

为什么不用 smem 或 top?

你可能会问,既然有 smemtop 这种现成的工具,为什么还要这么麻烦地去解析原始文件?

先说 smem。它确实能显示一个 swap 列,但它的底层数据源其实也是 /proc/$PID/smaps。问题在于,smem 默认会对共享内存进行分摊计算,这会导致它算出来的 swap 值比实际从 smaps 直接求和得到的结果要低,有时甚至会是0。也就是说,它给出的可能是一个“被平均后”的、失真的数字。

再看 top 命令。在 CentOS 6 及以后的版本里,top 输出中那个 SWAP 列(按 f 键然后选择 P 可以调出),其计算方式是 VIRT - RES。这本质上表示的是虚拟内存中“理论上可以被换出”的部分,而**不是**当前实际已经被换出的量。对于那些通过 mmap(MAP_ANONYMOUS) 等方式分配的内存,这个差值常常会远远大于真实的 swap 使用量,极具误导性。

所以说,当你真想精准定位“到底是哪个进程在偷吃 swap”时,绕开 /proc/$PID/smaps 这个原始数据源去走捷径,往往是行不通的。回归原始数据,虽然步骤稍多,但结果最可靠。

最后再提个醒:通过 smaps 查看到的 swap 值,只是系统在某个瞬间的快照。内存页的状态是动态的,可能刚被换出,下一秒又换入了。如果你发现某个进程的 swap 占用在持续增长且不见回落,那就要高度警惕了——这背后很可能藏着内存泄漏或者未被释放的大对象。到了这一步,光看数字就没用了,得请出 pstackgdb 这类工具,深入进程内部去查看堆栈情况,才能找到根本原因。

来源:https://www.php.cn/faq/2356192.html
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关攻略

内存储器概述是否包含缓存部分?
电脑教程
内存储器概述是否包含缓存部分?

内存储器概述是否包含缓存部分? 答案是肯定的。当我们谈论现代计算机的多级存储体系时,缓存(Cache)无疑是其中至关重要的一环。它与我们熟知的主存储器(RAM)、只读存储器(ROM)共同构成了广义上的“内存”范畴。缓存通常采用速度更快的静态RAM(SRAM)工艺制造,并按照与CPU核心的亲密程度,被

热心网友
04.25
美多集成灶自动清洗需要加水吗?
电脑教程
美多集成灶自动清洗需要加水吗?

美多集成灶自动清洗需要加水吗? 先说一个核心结论:完全不需要。美多集成灶的自动清洗功能,采用的是一套免水式高温热清洗系统。这套技术的精妙之处在于,它绕开了传统水洗的繁琐和隐患,转而利用高温蒸汽本身的力量。系统内置的加热元件会将蒸烤腔体精准升温至110℃,并稳稳地维持这个温度120秒。高温蒸汽能迅速软

热心网友
04.25
老板抽油烟机功能键布局是怎样的?
电脑教程
老板抽油烟机功能键布局是怎样的?

老板抽油烟机功能键布局是怎样的? 说起老板抽油烟机的功能键,你会发现一个有趣的现象:它并没有一套“放之四海而皆准”的固定模板。恰恰相反,不同型号之间的按键布局和交互方式,往往藏着不少差异化的巧思。常见的核心功能,比如启动 停止、高低风速调节、照明开关、自动清洗(通常标有“AUTO”或水滴图标)、定时

热心网友
04.25
望月双世界探索全攻略望月双世界探索玩法详解与深度指南
游戏攻略
望月双世界探索全攻略望月双世界探索玩法详解与深度指南

《望月》双世界开放探索指南:一场穿梭于赛博国风都市与地下废墟的沉浸式冒险 《望月》最令人眼前一亮的,莫过于它那套极具辨识度的双层立体世界。上层,是名为“天月城”的赛博朋克都市,但骨子里流淌的却是岭南文化的血液。它以广州为原型,把骑楼的飞檐、湿滑的雨后街面,乃至广式茶楼里的粤语对白,全都塞进了霓虹闪烁

热心网友
04.25
武装团体在马里各地发动协同攻击,目标是首都和机场
web3.0
武装团体在马里各地发动协同攻击,目标是首都和机场

马里袭击事件与伊朗军事行动的市场解读 根据马里军方发布的消息,其首都、主要机场及境内多个地点近期遭遇了武装团体的协同攻击。与此同时,伊朗方面的军事行动在4月30日当天仍在持续。值得注意的是,伊朗中央总部哈兹拉特·哈塔姆·安比亚此前已发出警告,称将对美国的封锁采取回应措施。 市场反应 一个有趣的现象是

热心网友
04.25

最新APP

宝宝过生日
宝宝过生日
应用辅助 04-07
台球世界
台球世界
体育竞技 04-07
解绳子
解绳子
休闲益智 04-07
骑兵冲突
骑兵冲突
棋牌策略 04-07
三国真龙传
三国真龙传
角色扮演 04-07

热门推荐

Llama中文社区
AI
Llama中文社区

Llama中文社区是什么 提起近年来火热的大语言模型,Meta的Llama系列无疑是开源领域的明星。但一个绕不开的问题是:如何让这些“国际范儿”的模型,更好地理解和使用中文?这恰恰是Llama中文社区诞生的初衷。简单来说,它是由LlamaFamily打造的一个高级技术社区,核心目标非常聚焦:致力于对

热心网友
04.25
Tech Talent AI
AI
Tech Talent AI

Tech Talent AI Sourcing是什么 简单来说,Tech Talent AI Sourcing 是摆在技术招聘领域的一个“效率翻跟斗”。由TalentSight开发的这款AI招聘工具,核心目标很明确:帮助招聘团队,尤其是那些在IT人才红海里“淘金”的团队,更快、更准地锁定对的人。它的

热心网友
04.25
CentOS系统如何防止SFTP被攻击
网络安全
CentOS系统如何防止SFTP被攻击

在CentOS系统上防止SFTP被攻击的配置与加固指南 对于依赖SFTP进行文件传输的CentOS服务器而言,安全配置绝非小事。攻击者一旦找到入口,数据泄露和系统失陷的风险便会急剧上升。别担心,通过一系列系统性的配置和加固措施,我们可以为SFTP服务构筑起坚实的防线。下面这份实操指南,将带你一步步完

热心网友
04.25
Linux里记事本软件如何进行文件加密
网络安全
Linux里记事本软件如何进行文件加密

在Linux里记事本软件如何进行文件加密 很多刚接触Linux的朋友可能会发现,系统自带的记事本类软件(比如gedit)并没有一个直接的“加密”按钮。这其实很正常,因为Linux的设计哲学更倾向于“一个工具做好一件事”。不过别担心,虽然记事本本身不内置加密,但我们可以借助几个强大且成熟的外部工具,轻

热心网友
04.25
debian分区如何加密
网络安全
debian分区如何加密

Debian分区加密全攻略:LUKS与LVM两种方案深度解析 在数据安全日益重要的今天,为Debian系统分区实施加密已成为系统管理员和资深用户的必备技能。本文将详细对比两种主流的Debian分区加密方法,帮助您根据实际需求选择最佳方案。下图直观展示了两种方案的核心流程与关系: 接下来,我们将深入剖

热心网友
04.25