Blog Of Leung

personal blog & work notes

View project onGitHub
 

top命令的使用

在linux中,当我们对自己的系统性能存在疑问的时候,通常都会使用top命令,检查当前的系统状态. 实际上,在对android设备进行系统调优或者系能监控的时候,top命令同样简单有效,特别是当一块新设计好的硬件需要看看性能的时候,或者怀疑某个进程在影响系统系能的时候.

通常情况下,只需要抓住top命令的几个要点,就能把系统性能看个大概了.linux上直接执行top就能看到以下界面,在android的shell环境中如果直接敲入top的话会发现跟普通linux下根本不同,那应该是android修改过的top命令吧,不过没关系,只要有busybox就好了,输入busybox top就能又看到熟悉的界面了.

result of top command

首先要看的第一个地方,是load average,从字面意思知道这是平均负载,通常也认为就是cpu的负载. load average的值在不同的设备上是要区分对待的,因为针对不同核心数的cpu,满载运行的负载值是不一样的. load average的值是指cpu在单位时间内平均需要承担多少负载,一般来说负载值不超过cpu的核心数都可以认为系统运行是顺畅的. 比如说,对于单核的cpu来说,load average的值在0~1之间变动就是属于正常运行,而对于双核cpu来说,这个值在0~2之间都属于正常运行,它们表明系统尚未满载,后面继续类推. 而一个双核cpu,加入load average达到了4以上,它表明cpu的每个核心都在承担它满负载的两倍运算量,这时候已经存在很大的不稳定性了.对于android系统来说,这时候就很容易出现那些被人吐槽过无数遍的问题,例如死机,例如自动重启,不多说.所以,load average非常重要.

另外,平均负载我们可以看到一共有三个值,这其实是分别对应系统在1分钟内,5分钟内,15分钟内的平均负载...突然释然了有木有,没有时间段怎么能叫平均呢. 对于这三个值,应该更加关注15分钟这个值,因为它监控和计算出来的值更能代表系统的平均运行状态;其次再看1分钟的值,因为它更能代表系统当前的运行状态;最后再顺便看看5分钟的值好了,谁叫你不长不短呢...一般来说,假如观察到1分钟的值偶然串到比较大的值,而15分钟负载值比较正常,这时候也是不需要太担心的.

第二个地方,应该要看看cpu(s)这一栏,主要是看看%us,%sy,%id和%wa这个点,它们分别是指用户进程,系统进程,空闲时间和cpu等待i/o流的时间比例.us,sy,wa这三个值最好是接近0,一般超过5就要留心了;id是cpu空闲时间,这个值就反过来了,正常运行,非高负载的情况下,这个值都应该保持在90多才对.另外,对于多核cpu,在top命令中按下数字1,还能看到单独的各个核心的运行状态,top命令非常贴心.

第三个,该看看内存占用了,特别注意的是,必须要正确理解linux的内存占用计算方式. 还是以上面的图片来看. 这里的总内存为3886280k,大概就是4GB,used掉了2058620k,在windows系统中习惯了的人大概就要捉急了,系统并没有运行大型的程序,怎么内存就花掉一半了呢,内存占用太高了. 可是事实不是这样的,在linux的世界里,我们还要关注buffers和caches这两个指标,可以认为它们其实是缓存起来的内存,虽然在物理上,它们已经被使用了,但是这是linux提高内存使用速度的技术,buffers和caches占用的内存是可以随时释放的. 所以真正被占用而无法被释放的内存应该是:

used-buffers-cache

所以此处应该是:2058620-114064-627060=1317496k=1286mb,实际上占用的内存只是1GB多一点而已. 这个系统是健康的.

最后,下面有个列表,top会动态地把消耗资源最多的进程列在前面,当我们想跟踪是哪个或者哪几个进程在吃系统资源时,盯着列表的前五项是个不错的做法.

Author:leung

01 Nov 2013

← Home

comments powered by Disqus