使用 awk 取内存的具体数值,通过单位换算得出每个进程的使用量

KB MB 10s awk RSS
发布于 2026-06-14
6

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

扫码阅读
手机扫码阅读

文章主旨:本文介绍了三种使用 ps 结合 awk 命令在 Linux 中获取进程内存占用(RSS)并进行单位换算(KB、MB、GB)的方法,附带了详细的命令解释。

关键要点:

  1. 通过 ps -eo pid,rss,cmd --sort=-rss 获取按内存降序的进程列表,利用 awk 进行格式化输出和单位换算。
  2. 方法一使用简单的算术运算直接转换 RSS 值并拼接单位字符串。
  3. 方法二在 awkBEGIN 块中添加表头,并分别演示了 KB 和 MB 输出格式。
  4. 方法三使用 ps aux 获取更多字段,通过 if-else 判断自动选择合适的单位(GB、MB、KB、B)并保留指定位数的小数。
  5. 所有方法均利用 awk 的内置变量(NR、$1~$N)和格式化函数(printf)实现。

内容结构:

  • 方法一(简单单位换算):
    命令:ps -eo pid,rss,cmd --sort=-rss | awk 'NR>1 {printf "%-10s %-10s %-50s\n", $1, $2/1024 "MB", $3}'
    通过将 $2 除以 1024 得到 MB,若需 GB 则除以两个 1024。解释中各字段作用(-e、-o、--sort、NR>1 等)。
  • 方法二(添加表头与格式控制):
    KB 输出:ps ... | awk 'BEGIN {...} NR>1 {printf "%-10s %-10dKB %-50s\n", $1, $2, $3}'
    MB 输出:ps ... | awk 'BEGIN {...} NR>1 {printf "%-10s %-10.5fMB %-50s\n", $1, $2/1024, $3}'
    分别解释了 BEGIN 块、格式占位符(%s、%d、%f)及宽度和小数位的作用。
  • 方法三(自动适应单位):
    命令:ps aux | awk 'BEGIN {定义KB、MB、GB} NR>1 {mem=$6; if (mem>GB) printf "%.2f GB"; else if (mem>MB) printf "%.2f MB"; else if (mem>KB) printf "%.2f KB"; else printf "%d B"}'
    通过 ps aux 的第六列($6)获取内存(KB),利用 awk 的 if-else 进行智能单位转换并打印进程名和用户($11、$2)。

文章总结:本文为 Linux 运维人员提供了三种简明实用的命令组合,用于监控进程内存使用情况,可根据需求选择合适的方法,兼具可读性与灵活性。

杰哥的IT之旅