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

Linux 命令:按内存使用大小排序查看 PID 的完全指南

Linux 命令:按内存使用大小排序查看 PID 的完全指南

在 Linux 系统中,监控进程的内存使用情况是日常运维和调试的重要任务。无论是排查内存泄漏,还是优化系统性能,我们经常需要找到占用内存最多的进程,并获取它们的 PID(进程 ID)。本文将详细介绍如何使用 Linux 命令实现这一需求,从基础用法到高级技巧,带你全面掌握这一技能。

一、基础命令:pssort 的组合

在 Linux 中,可以通过 ps 命令结合 sort 命令,按照内存使用大小对进程排序,并显示 PID。以下是最常用的基础命令:

ps aux --sort=-%mem | head -n 10

命令分解

  1. ps aux

    • a:显示所有用户的进程,不限于当前终端。
    • u:以用户友好的格式输出详细信息,包括用户名、CPU 使用率、内存使用率等。
    • x:包含没有控制终端的进程(如后台守护进程)。
  2. --sort=-%mem

    • --sortps 的排序选项,%mem 表示按内存使用百分比排序。
    • 前面的 - 表示降序排列,即内存占用从高到低。
  3. | head -n 10

    • 通过管道将 ps 的输出传递给 head,只显示前 10 行,也就是内存占用最高的 10 个进程。你可以根据需要修改数字,比如 head -n 5

输出示例

运行上述命令后,你会看到类似以下的输出:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
user1     1234  2.1 15.3 123456 78901 ?        S    10:00   0:05 /usr/bin/someprocess
user2     5678  1.5 10.2 98765 54321 ?        R    09:45   0:03 /opt/app/anotherprocess
root      9012  0.5  8.7 54321 32109 ?        S    09:00   0:01 /usr/sbin/nginx
...
  • PID:进程 ID,唯一标识一个进程。
  • %MEM:内存使用百分比,表示该进程占用的物理内存比例。
  • RSS:Resident Set Size,实际使用的物理内存(单位:KB)。
  • COMMAND:启动进程的命令或程序路径。

这个命令非常直观,适合快速定位内存占用大户。

二、简洁输出:只看 PID 和内存使用

如果不需要那么多详细信息,只想快速获取 PID 和内存使用百分比,可以用 awk 提取关键字段:

ps aux --sort=-%mem | awk '{print $2 " " $4}' | head -n 10

解释

  • $2:从 ps aux 输出中提取第 2 列,即 PID。
  • $4:提取第 4 列,即 %MEM
  • 输出结果更简洁,例如:
1234 15.3
5678 10.2
9012 8.7
...

这种方式特别适合脚本中使用,或者当你只需要核心数据时。

三、日常使用场景

了解了基础用法后,我们来看看这个命令在实际工作中的应用场景:

  1. 排查内存不足问题
    当系统运行缓慢或收到 Out of Memory 警告时,运行 ps aux --sort=-%mem 可以快速找到内存占用最多的进程,结合 PID 进一步分析(如用 top 监控或 kill 终止)。

  2. 优化服务器性能
    在 Web 服务器或数据库服务器上,某些进程(如 Apache、MySQL)可能因配置不当占用过多内存。通过这个命令找出问题进程,调整配置或重启服务。

  3. 开发调试
    开发新程序时,运行后用此命令检查其内存占用是否异常,帮助定位内存泄漏。

四、高级用法与扩展技巧

基础命令已经很实用,但 Linux 提供了更多灵活选项和组合方式,让我们探索一些高级用法。

1. 按实际内存(RSS)排序

%MEM 是相对百分比,有时你可能更关心实际内存使用量(RSS)。可以用以下命令:

ps aux --sort=-rss | head -n 10
  • --sort=-rss:按 RSS(物理内存使用量)从高到低排序。
  • 输出中的 RSS 列会显示具体数值(单位:KB),更直观。

2. 过滤特定用户或进程

如果只想查看某个用户的进程,可以加上 grep

ps aux --sort=-%mem | grep "user1" | head -n 5

或者结合 ps-u 参数:

ps -u user1 --sort=-%mem | head -n 5

3. 动态监控替代方案:结合 watch

ps 是静态快照,如果需要实时更新,可以用 watch

watch -n 1 "ps aux --sort=-%mem | head -n 10"
  • -n 1:每 1 秒刷新一次。
  • 这样可以动态观察内存使用变化。

4. 导出结果到文件

排查问题时,可能需要保存记录:

ps aux --sort=-%mem > memory_usage.txt

然后用文本编辑器查看,或用 less memory_usage.txt 浏览。

5. 结合 kill 快速清理

找到高内存进程后,可以直接用 PID 终止:

kill -9 1234

在脚本中,可以自动化处理:

ps aux --sort=-%mem | awk 'NR==2 {print $2}' | xargs kill -9
  • NR==2:取第一行进程(跳过标题行)。
  • xargs:将 PID 传递给 kill

注意kill -9 是强制终止,使用前确保不会影响关键服务。

6. 显示更多字段

ps 支持自定义输出格式,用 -o 参数指定字段。例如:

ps -eo pid,user,%mem,rss,vsz,comm --sort=-%mem | head -n 10
  • -e:显示所有进程。
  • -o:自定义列,包括 pid(PID)、user(用户)、%mem(内存百分比)、rss(物理内存)、vsz(虚拟内存)、comm(命令名)。
  • 输出更灵活,适合详细分析。

五、与其他工具的对比

除了 ps,Linux 还有其他工具可以实现类似功能:

  • top:实时监控,按 M 键可按内存排序,但交互性更强。
  • htoptop 的增强版,界面友好,支持鼠标操作。
  • free:专注于内存总量概览,不显示具体进程。
    根据需求选择:ps 适合脚本和静态分析,top/htop 适合动态监控。

六、注意事项

  1. 权限限制:普通用户只能看到自己的进程,root 用户能看到所有进程。
  2. 内存单位RSSVSZ 是 KB,转换为 MB 时需除以 1024。
  3. 排序准确性%MEM 是相对值,可能因总内存不同而有差异,建议结合 RSS 判断。

七、总结

通过 ps aux --sort=-%mem 及其变体,我们可以轻松按内存使用大小排序并查看 PID。这一命令简单高效,适用于各种场景。从基础的快速排查,到高级的脚本自动化和自定义输出,Linux 的灵活性让它成为系统管理者的得力助手。

试试在你的系统上运行这些命令,观察内存占用情况,或者结合实际任务优化它们。你会发现,掌握这些技巧能大大提升效率!

后记

2025年3月18日22点12分于上海,在Grok 3大模型辅助下完成。

相关文章:

  • Swift实战(微调多模态模型Qwen2.5 vl 7B)
  • 基于香橙派 KunpengPro学习CANN(3)——pytorch 模型迁移
  • JavaScript基础-获取元素
  • Shell脚本中的弱治简写
  • 平衡树的模拟实现
  • Golang开发
  • ROS合集(一)ROS常见命令及其用途
  • springboot多种生产打包方式教程
  • 循环神经网络中用到的概率论知识
  • YOLOv8 OBB 旋转目标检测模型详解与实践
  • 59. 螺旋矩阵 II
  • 深度洞察:特种设备作业考试的核心要点与备考策略
  • 蓝桥杯 修剪灌木
  • opencv初步学习——图像处理3
  • LeetCode BFS层序遍历树
  • 工作记录 2017-02-04
  • 【css酷炫效果】纯CSS实现照片堆叠效果
  • 2025年通信安全员考试题库及答案
  • xxl-job 执行器端服务器的简单搭建
  • OneCyber 平台
  • 陕西省市监局通报5批次不合格食品,涉添加剂超标、微生物污染等问题
  • 上海市税务局回应刘晓庆被举报涉嫌偷漏税:正依法依规办理
  • 泽连斯基:乌代表团已启程,谈判可能于今晚或明天举行
  • 上海黄浦江挡潮闸工程建设指挥部成立,组成人员名单公布
  • 现场丨在胡适施蛰存等手札与文献间,再看百年光华
  • 普京批准俄方与乌克兰谈判代表团人员名单