top命令显示区分为两个部分,上面是系统统计信息;下面是进程信息。
第一行,需要关注的是load avg这行,通过这三个值,我们能看出系统负载的发展趋势。比如过去1分钟、5分钟、15分钟的平均负载的值分别是2.4、1.5、0.7,能说明什么问题呢?压测后,系统的负载越来越多。这个load值,除以逻辑CPU的数量,大于5就表明系统在超负荷运转了。
逻辑CPU的数量怎么看?
cat /proc/cpuinfo| grep “processor”| wc -l
运行的越多,系统肯定越累。僵尸进程的概念大家搜索一下,一般情况下,不会有僵尸进程。
这一行是CPU的信息,比较重要,需要关注us、sy、wa这3个值占用是否高。多少算高?好问题,us一般超过75%就算高,sy一般超过30%就算高,wa超过5%就算高。
内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。
现代的操作系统为了最大利用内存,在内存中存放了缓存,因此内存利用率100%并不代表内存有瓶颈,衡量系统内有有瓶颈主要靠SWAP(与虚拟内存交换)交换空间利用率,一般情况下,SWAP交换空间利用率要低于70%,太多的交换将会引起系统性能低下。
上面说了,第4行,不能反应内存是否够用,最主要还是要看这一行。我上面图片中交换空间利用率0%,很明显内存足够。
好,我们已经了解了基本的top命令各个显示项的意义。来看下面的图
负载情况看,过去15分钟有点忙,但现在1分钟开始没什么压力了
CPU,情况很好,us只有0.3%远小于75%,sy也只有0.3%远小于30%,wa更是0.0%;
Mem,内存使用率33%,挺好;
Swap,使用率28.8%,挺好;
图二,是JMeter并发登录虚拟机Redmine系统时,使用top命令看到的情况
负载情况看,过去15分钟很清闲,但现在1分钟开始有压力了;
CPU,情况很好,us只有84.2%大于75%,情况不乐观;sy有15.8%小于30%,wa是0.0%,小于5%,也还好;
Mem,内存使用率72.1%,有压力;
Swap,使用率21%,挺好;
从上面图初步分析,瓶颈在CPU,而不是内存。
再通过下面的进程数据看进程号5502和9680这两个进程消耗了大量的CPU。好,我们暂停分析。再来看看top命令的用法。
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用情况,类似Windows任务管理器。top是一个动态显示信息的命令,每隔3秒自动刷新,还可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。
top命令有很多用法,用man top,查看top的帮助说明,我保存到world,有26页之多。这篇文章肯定不可能写完(实际上我也不会,哈哈)。所以只讲解常用的(我会的)
命令格式:
top [-] [d] [p] [q] [c] [C] [S] [n]
参数说明:
d: 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。 top -d 1 ,则top每隔1秒刷新显示一次;
p: 通过指定监控进程ID来仅仅监控某个进程的状态。top -p 16091 只看某一个进程的;
c: 显示整个命令行而不只是显示命令名
在top命令的显示窗口,我们还可以输入以下字母,进行一些交互:
h或者? : 显示帮助画面,给出一些简短的命令总结说明。
q: 退出程序。
M : 根据驻留内存大小进行排序。——————这个要记住
P:根据CPU使用百分比大小进行排序。————————这个要记住
T: 根据时间/累计时间进行排序。
(1)多核多CPU的情况
top命令中,按1,显示多核CPU的使用情况
我这台服务器是1物理CPU(4逻辑CPU)
再按,1 ,回到top原始页面
(2)敲击键盘“b”(打开/关闭加亮效果),top的视图变化如下
top命令是Linux上进行系统监控的首选命令,但有时候却达不到我们的要求,top命令的监控最小单位是进程,所以看不到程序的线程数和客户连接数,通常可以ps和netstate两个命令来补充top的不足。
监控java线程数:
ps -eLf | grep java | wc -l
监控网络客户连接数:
netstat -n | grep tcp | grep 侦听端口 | wc -l
上面两个命令,可改动grep的参数,来达到更细致的监控要求。
在Linux系统一切都是文件的思想贯彻指导下,所有进程的运行状态都可以用文件来获取。系统根目录/proc中,每一个数字子目录的名字都是运行中的进程的PID,进入任一个进程目录,可通过其中文件或目录来观察进程的各项运行指标,例如task目录就是用来描述进程中线程的,因此也可以通过下面的方法获取某进程中运行中的线程数量(PID指的是进程ID):
ls /proc/PID/task | wc -l
在linux中还有一个命令pmap,来输出进程内存的状况,可以用来分析线程堆栈:
pmap PID