top命令算是最直观、好用的查看服务器负载的命令了。它实时动态刷新显示服务器状态信息,且可以通过交互式命令自定义显示内容,非常强大。
在终端中输入top,回车后会显示如下内容:
|
|
系统信息统计
前五行是系统整体状态的统计信息展示区域。下面分别介绍每一行中的内容:
第一行显示服务器概况
如下所示,第一行列出了服务器运行了多长时间,当前有多少个用户登录,服务器的负荷情况等,使用uptime命令能获得同样的结果
123top - 21:48:39 up 8:57, 2 users, load average: 0.36, 0.24, 0.14/ / / \当前时间 运行时长 当前登录用户数 平均负载(1分钟、5分钟、15分钟)平均负载的值越小代表系统压力越小,越大则代表系统压力越大。通常,我们会以最后一个数值,也就是15分钟内的平均负载作为参考来评估系统的负载情况。
对于只有单核cpu的系统,1.0是该系统所能承受负荷的边界值,大于1.0则有处理需要等待。一个单核cpu的系统,平均负载的合适值是0.7以下。如果负载长期徘徊在1.0,则需要考虑马上处理了。超过1.0的负载,可能会带来非常严重的后果。当然,多核cpu的系统是在前述值的基础上乘以cpu内核的个数。如对于多核cpu的系统,有N个核则所能承受的边界值为N.0。详见:理解Linux系统负荷和理解load average第二行是进程信息:
123Tasks: 322 total, 2 running, 320 sleeping, 0 stopped, 0 zombie/ / / / /进程总数 正运行进程数 睡眠进程数 停止进程数 僵尸进程数第三行是CPU信息:
123456789%Cpu(s):5.0 us 用户空间CPU占比1.7 sy 内核空间CPU占比0.0 ni 用户进程空间改过优先级的进程CPU占比93.0 id 空闲CPU占比0.0 wa 待输入输出CPU占比0.3 hi 硬中断(Hardware IRQ)CPU占比0.0 si 软中断(Software Interrupts)CPU占比0.0 st -百分比计算方式,比如一秒内有100个cpu时间片,这个cpu时间片就是cpu工作的最小单位。那么这100个cpu时间片在不同的区域和目的进行操作使用,就代表这个区域所占用的cpu时间比。也就是这里得出的cpu时间百分比。
将文件从磁盘的src位置拷贝到磁盘的dst位置。文件会从src先读取进入到内核空间,然后再读取到用户空间,然后拷贝数据到用户空间的buf上,再通过用户空间,内核空间,数据才到磁盘的dst上。所以从上面这个程序来看,cpu消耗在kernel space的时候就是sy(系统态使用的cpu百分比),cpu消耗在user space的时候就是us(用户态使用的cpu百分比)。
如果程序都没什么问题,那么是没有hi和si的,但是实际上有个硬中断和软中断的概念。比如硬中断,cpu在执行程序的时候,突然外设硬件(比如硬盘出现问题了)机器需要立刻通知cpu进行现场保存工作。这个时候会cpu会出现上下文切换。就是cpu会有一部分时间会被硬中断占用了,这个时间就是hi。相类似,si是软中断的cpu占用时间,软中断是由软件的指令方式触发的。
ni是nice的意思,nice是什么呢,每个linux进程都有个优先级,优先级高的进程有优先执行的权利,这个叫做pri。进程除了优先级外,还有个优先级的修正值。即比如你原先的优先级是20,然后修正值为-2,那么你最后的进程优先级为18。这个修正值就叫做进程的nice值。那么nice是一个进程的优先级修正值,为什么会占用cpu时间呢?ni是指用做nice加权的进程使用的用户态cpu时间比,我的理解就是一个进程的所谓修正值就意味着多分配一些cpu时间给这个进程的用户态,这个中间所多分配的cpu时间就是我们这里的ni。
wa指的是CPU等待磁盘写入完成的时间,就是说前提是要进行IO操作,在进行IO操作的时候,CPU等待时间。比如上面那个程序,最后一步,从系统空间到dst硬盘空间的时候,如果程序是阻塞的,那么这个时候cpu就要等待数据写入磁盘才能完成写操作了。所以这个时候cpu等待的时间就是wa。所以如果一台机器看到wa特别高,那么一般说明是磁盘IO出现问题,可以使用iostat等命令继续进行详细分析。
st的名字很生动,偷取。。。是专门对虚拟机来说的,一台物理是可以虚拟化出几台虚拟机的。在其中一台虚拟机上用top查看发现st不为0,就说明本来有这么多个cpu时间是安排给我这个虚拟机的,但是由于某种虚拟技术,把这个cpu时间分配给了其他的虚拟机了。这就叫做偷取。
剩下的id就是除了上面那么多cpu处理上下文以外的cpu时间片。当然在这些时间片上,cpu是空闲的。
top的所有这些cpu时间应该是相加为100%的。
第四行是内存信息:
123KiB Mem: 1010504 total, 937416 used, 73088 free, 23708 buffers/ / / /物理内存总量 使用中总量 空闲总量 缓存的内存量内存总量(used)指的是现在系统内核控制的内存数,空闲内存总量(free)是内核还未纳入其管控范围的数量。纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。
第五行是swap交换分区信息:
123KiB Swap: 1046524 total, 280708 used, 765816 free, 365556 cached Mem/ / / /交换区总量 使用中总量 空闲总量 缓存的内存量程序可用内存数:Memfree + (buffers + cached)
程序已用内存数:Memused – (buffers + cached)如果你的 swap used 数值大于 0 ,基本可以判断已经遇到内存瓶颈了,要么优化你的代码,要么加内存。
buffers是用来存储,目录里面有什么内容,权限等等。而cached直接用来记忆我们打开的文件,如果你想知道他是不是真的生效,你可以试一下,先后执行两次cat 一个比较大的日志文件,比如nginx的access.log,你就可以明显的感觉到第二次的开打的速度快很多。
因为Linux将你暂时不使用的内存作为文件和数据缓存,以提高系统性能,当你需要这些内存时,系统会自动释放(不像windows那样,即使你有很多空闲内存,他也要访问一下磁盘中的pagefiles)
进程(任务)状态监控
第七行及以下显示了各进程(任务)的状态监控。各列所代表的含义如下:
|
|
交互命令
|
|
top常用命令
|
|
参考:
http://tabalt.net/blog/linux-top/
http://www.51xdn.net/czxt/Linux/20150123/11197.html