需求介绍
实际生产常常会有这样哪样的需求,可以说是千奇百怪,无所不有,
这可不,今天,有个需求是详细输出系统中各个应用(JAVA项目)所占的内存大小,单位以MB显示出来,结果需要直观,为什么有此需求呢?
是因为,在内部测试环境中,开发出来的项目上测试环境运行后,要实际观察运行后所占的系统内存数量,如果一旦有大数据交互时,此项目消耗的内存较高,那么可能就需要从代码层面进行优化,以满足上线后项目的稳定运行!
top命令解决思路
首先想到是top命令
但是结果显示只有JAVA应用占内存的百分比,没法正确显示所要的结果
top 命令显示结果,输入M 按%MEM显示,仍然是JAVA的应用的结果百分比,不是具体项目名称
top -c 在显示的结果中输出M 按%MEM显示
基本能满足需求了,结果也还挺直观
ps命令解决思路
[root@linux1 ~]# ps -ef --sort -rss|grep java
这个命令显示的结果也只是做了个占用大小按应用名称排序,无法知道所占用内存是多少,也没办法看出百分比
[root@linux1 ~]# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
使用此命令然后根据实际使用内存排序,默认显示单位是kb(/1024)通过计算可以得出所占用的大小,基本满足需求 [root@linux1 ~]# ps -aux --sort -rss|grep java
[root@linux1 ~]# ps -e -o 'pid,args,rsz,pcpu'|grep java|sort -n
此命令和上面的结果显示基本相同,默认单位也是kb
htop解决思路
[root@linux1 ~]# htop --help
htop 2.0.2 - (C) 2004-2016 Hisham Muhammad
Released under the GNU GPL.
-C --no-color Use a monochrome color scheme
-d --delay=DELAY Set the delay between updates, in tenths of seconds
-h --help Print this help screen
-s --sort-key=COLUMN Sort by COLUMN (try --sort-key=help for a list)
-u --user=USERNAME Show only processes of a given user
-p --pid=PID,[,PID,PID...] Show only the given PIDs
-v --version Print version info
[root@linux1 ~]# htop --sort-key=M_SIZE
显示的结果如图,与需求比较接近,就是无法去重,需要手工up/down去看其它的
输入F1可查看相关的帮助,进行过滤或选择