1、监控CPU使用率java
一、 Linux提供了监控CPU使用率的命令行工具,能够保留文本形式的CPU使用率运行历史和日志。经常使用的命令有:vmstat、mpstat、top等等,下面只是top命令的一个截图,其余的命令的使用方式,请自行搜索。ios
图1-1工具
Linux的top命令不只包括CPU使用率也包括进程统计数据和内存使用率。上面的截图显示它的输出主要包含两个部分,上部分是整个系统的统计信息,下半部分是进程的统计信息(默认按CPU使用率由高到低排序)。命令行
2、CPU调度程序运行队列线程
一、 Linux上能够用vmstat命令监控运行队列长度。Vmstat输出的第一列是运行队列长度,值是运行队列中轻量级进程的实际数量。以下图,红色方框列即为运行队列。日志
图1-2排序
3、内存使用率队列
一、 Linux上能够用mstat输出中的free列监控页面交换,也能够用其余方法例如top命令来监控。这里介绍用vmstat监控页面交换。须要监控vmstat中的si和so,他们分别表示内存页面换入和换出的量。此外,free列显示可用的空闲内存,留意是否会同时出现空闲内存少和页面调度频繁的情形,相比而言,实际的数量单位反而不那么重要。若是观察到上述统计数据的模式,说明系统可能在进行页面交换。下面示例中的系统没有页面交换,由于si和so 没有页面调度,并且空闲内存不少。进程
图1-3内存
二、下面截图(网上下载的)中的系统正在进行页面交换
图1-4
注意上面的数据。当空闲内存刚开始减小时,si和so几乎没有什么页面调度。但当空闲内存达到155000~175000时,so出现页面换出活动。一旦页面换出变得平稳,si列显示的页面换入开始快速增长。一般说明系统中有应用或一组应用在进行大量的内存分配或内存访问。当物理内存逐渐耗尽时,系统开始将最近最少使用的内存置换到虚拟内存。当应用须要内存页时,就会发生页面换入,随着页面调度的增长,空闲内存基本不变。换句话说,当系统空闲内存不多时,内存页面换入和换出的速度几乎同样快。在Linux系统进行页面交换时,Linux的vmstat能够观察到这种典型模式。
二、 监控锁竞争(网上找的)
Linux上可使用sysstat包中的pidstat命令监控锁竞争。pidstat –w输出结果中的cswch/s
是让步式上下文切换。重点须要注意的是,该值并不包括全部的上下文切换。此外,pidstat –w 报告的是每秒而不是每一个测量间隔的让步式上下文切换。所以,让步式上下文切换浪费的时钟周期,能够由pidstat –w的让步式上下文切换数除以虚拟处理器的数目而得出。请记住,pidstat –w是全部虚拟处理器的让步式上下文切换。让步式上下文切换数乘以80000,除以CPU每秒的时钟周期,能够得出让步式上下文切换所耗费的CPU时钟周期百分比。下面是pidstat –w每5秒监控进程id为9391的java应用。
图1-5
下面估算上下文切换所浪费的时钟周期。处理器为3.0GH双核IntelCPU,pidstat –w显示系统每秒钟大约发生3500个上下文切换。所以,每一个虚拟处理器的上下文切换为3500/2 = 1750,耗费的时钟周期为1750 x 80 000 = 140 000 000。3GHz CPU每秒的时钟周期数为3 000 000 000。
所以上下文切换所浪费的时钟周期为140 000 000 /3 000 000 000 = 4.7%。再次应用通常性准则(让步时钟周期占用3% ~ 5%或更多时钟周期),说明Java应用正面临锁竞争。
上面说了让步式上下文切换,下面说说抢占式上下文切换。Linux上能够用pidstat –w监控抢占式上下文切换。抢占式上下文切换率高代表预备运行的线程数多于可用的虚拟处理器,因此此时用vmstat一般就能看到很长的运行队列、很高的CPU使用率以及大量与之相关的抢占式上下文切换。
4、 磁盘I/O使用率
一、Linux上能够用iostat –xm监控磁盘I/O使用率和系统态CPU使用率。下面的示例显示Linux系统的vda盘为97%,系统态CPU使用率为16%。
图1-6