使用 awk 取内存的具体数值,通过单位换算得出每个进程的使用量
版权声明
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
杰哥的IT之旅
扫码关注公众号
扫码阅读
手机扫码阅读
文章主旨:本文介绍了三种使用 ps 结合 awk 命令在 Linux 中获取进程内存占用(RSS)并进行单位换算(KB、MB、GB)的方法,附带了详细的命令解释。
关键要点:
- 通过
ps -eo pid,rss,cmd --sort=-rss获取按内存降序的进程列表,利用awk进行格式化输出和单位换算。 - 方法一使用简单的算术运算直接转换 RSS 值并拼接单位字符串。
- 方法二在
awk的BEGIN块中添加表头,并分别演示了 KB 和 MB 输出格式。 - 方法三使用
ps aux获取更多字段,通过if-else判断自动选择合适的单位(GB、MB、KB、B)并保留指定位数的小数。 - 所有方法均利用
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之旅
杰哥的IT之旅
扫码关注公众号