Linux命令:实时查看某个程序占用内存的变化

image

详解

一个程序可以包含一个进程或多个进程, 一个进程可以执行一个或多个程序

  • 查看一个或多个进程运行信息

开头演示的例子解释,Agent程序由多个进程共同来进行,以\|(逻辑关系中是“或”的意思)区分开来,即qt-client\|sys-app\|clamd

top -b n 1| grep 'qt-client\|sys-app\|clamd'

非交互模式下b,输出一次n 1,一个或多个进程的运行信息,输出结果如下:
image

  • 使用awk进行数据处理
top -b n 1 | grep 'qt-client\|sys-app\|clamd'|awk '{print $6,$10,$12}'

保留关键信息:$6进程占用的物理内存,$10进程使用物理内存与总内存的百分比,$12进程启动命令名称
image

如果存在2个及以上进程时,做累加运算,执行如下命令行,分别指定了三个进程为qt-client、sys-app、clamd

top -b n 1| grep 'qt-client\|sys-app\|clamd'|awk '{a+=$6;b+=$10}END{print a,b}'

image
累加后,你会发现这里并没有打印$12即启动的进程名字,因为这里是做累加,也就是把多个行结果合并成一行结果,类似SQL里面的聚合运算,即使指定了$12也只会输出其中一个进程名字,达不到我们想要的效果,所以这里不做打印输出。

再打印一些输出提示,为了更加好看,顺便把内存大小转换为单位M的形式

top -b n 1| grep 'qt-client\|sys-app\|clamd'|awk '{a+=$6;b+=$10}END{printf("xxx程序占用本地内存大小为: %2.fM\n",a/1024);printf("xxx程序占用本地内存百分比为:%.2f%%\n",b)}'

image

  • 使用while循环语句实时输出
while true;do sleep 1;top -b n 1| grep 'qt-client\|sys-app\|clamd'|awk '{a+=$6;b+=$10}END{printf("xxx程序占用本地内存大小为: %2.fM\n",a/1024);printf("xxx程序占用本地内存百分比为:%.2f%%\n",b)}';done

image

经整理后

count=1;while true;do echo "执行次数:$count";((count=$count+1));sleep 1;top -b n 1| grep 'qt-client\|sys-app\|clamd'|awk '{a+=$6;b+=$10}END{printf("Agent程序占用本地内存大小为: %2.fM\n",a/1024);printf("Agen程序占用本地内存百分比为:%.2f%%\n",b)}';done

每次执行从1计数,如果你想接着上一次结束的地方继续计算,可以把count=1去掉

posted @ 2021-12-17 09:48  Rosaany  阅读(1340)  评论(0编辑  收藏  举报