一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数,如:
xiaojia@xiaojia-Lenovo-G460:~$ vmstat 2 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 1812428 111372 979624 0 0 51 31 211 849 6 3 90 1 0
2表示每个两秒采集一次服务器状态,1表示只采集一次。
实际上,在应用过程中,我们会在一段时间内一直监控,不想监控直接结束vmstat就行了,例如:
xiaojia@xiaojia-Lenovo-G460:~$ vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 1802348 111596 979808 0 0 50 31 211 848 6 3 90 1 0
0 0 0 1802780 111604 979808 0 0 0 8 1174 2677 5 2 92 0 0
1 0 0 1802480 111604 979808 0 0 0 0 1157 2553 5 2 93 0 0
0 0 0 1802628 111612 979808 0 0 0 42 1127 2495 4 2 93 1 0
0 0 0 1801968 111612 979808 0 0 0 0 1133 2496 5 2 93 0 0
1 0 0 1802108 111612 979808 0 0 0 0 1142 2433 4 2 93 0 0
这表示vmstat每2秒采集数据,一直采集,直到我结束程序,这里采集了6次数据我就结束了程序。
标识符 | 含义 |
---|---|
procs | |
r | 运行队列长度,值是运行队列中轻量级进程的实际数量。注1 |
b | 阻塞的进程,值是等待IO的进程数量 |
memory | |
swpd | 虚拟内存已使用的大小。如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器 |
free | 空闲的物理内存的大小 |
buff | 用作缓冲的内存大小 |
cache | 用作缓存的内存大小 |
swap | |
si | 每秒从交换区写到内存的大小 |
so | 每秒写入交换区的内存大小。注2 |
io | |
bi | 每秒读取的块数 |
bo | 每秒写入的块数 |
system | |
in | 每秒中断数,包括时钟中断。 |
cs | 每秒上下文切换数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。 |
cpu(%) | |
us | 用户进程执行时间(user time) |
sy | 系统进程执行时间(system time)。注3 |
id | 空闲时间(包括IO等待时间),中央处理器的空闲时间 |
wa | 等待IO时间 |
注
1.系统运行队列长度等于虚拟处理器的个数时,用户不会明显感到性能下降。当运行队列的长度达到虚拟处理的4倍或更多时,系统响应就非常迟缓了。此处虚拟处理器的个数就是系统硬件线程的个数,也就是JAVA API中Runtime.availableProcessors()的返回值。
2.留意出现空闲内存少和页面频繁调度的情况,因为这可能表示着系统在进行页面交换。java垃圾回收器为了回收不可达的对象占用的空间,需要访问大量的内存。如果java堆的一部分被置换出去,就必须先置换进内存以便垃圾回收器扫描存活的对象,这会增加垃圾收集的持续时间。垃圾收集是一种Stop-The-World(时空停滞)操作,即停止正在运行的应用线程,如果此时系统正在进行页面交换,会引起JVM长时间停顿。如果发现垃圾收集时间变长,系统有可能正在页面交换。
3.原本用于执行操作系统内核调用的CPU周期也可以用来执行应用代码。所以理想情况下,应用达到最高性能和扩展性时,它的系统态CPU使用率为0。因此,提高应用性能和扩展性的一个目标是尽可能的降低系统态CPU使用率。
Windows性能监控中,可以按需添加计数器实现Linux vmstat命令同样的监控,当然你也可以使用Windows typeperf命令进行监控。
Windows中CPU调度程序运行队列的监控:
注:比例因子为10,因此上图实际的运行队列长度是0~10。上图红线为运行队列长度(System\Processor Queue Length)。
Windows内存利用率的监控:
注:当可用内存变少,并用页面调度时,系统可能正在进行页面交换。上图绿线为每秒内存页面调度(Memory\Page/Second),红线为可用内存字节数(Memory\Available MBytes)。