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

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大模型辅助下完成。


http://www.kler.cn/a/591270.html

相关文章:

  • Day19:把数字翻译成字符串
  • Android Fresco 框架工具与测试模块源码深度剖析(五)
  • 【Linux】进程间通信——共享内存
  • 从0到1彻底掌握Trae:手把手带你实战开发AI Chatbot,提升开发效率的必备指南!
  • vue3中用v-for循环出三个元素,绑定元素的ref并拿到这三个元素的ref属性
  • JavaScript 日期区间计算:全面解析与实战应用
  • 第一个vue项目
  • 工作记录 2017-02-06
  • Mysql 安装指南(小白入门)
  • 改变一生的思维模型【14】奥卡姆剃刀理论
  • 【408计算机网络-自顶向下-应用层】-简单描述概念PPT-中国科学技术大学-郑老师-计算机网络课程的深度复习资料
  • 台达PLC转太网转换的教程案例(台达DVP系列)
  • 【工业现场总线】控制网络的主要特点是?OSI参考模型的分层是?
  • C++与C的基本不同
  • 2025年Go语言面试中常见的50道面试题,涵盖基础语法、并发编程、数据结构、错误处理
  • K8s的部署
  • 【Linux编程】IPC之消息队列从踩坑到实战:核心原理、实战案例与C++封装详解(含完整代码)
  • Leetcode 刷题笔记1 图论part01
  • Java 大视界 -- Java 大数据在智能家居设备联动与场景自动化中的应用(140)
  • 【VS小知识】VS如何保存UTF8