本文共 2077 字,大约阅读时间需要 6 分钟。
vmstat - Report virtual memory statistics,从名字上来看这是一个虚拟内存统计报告工具,这个工具在Linux/unix中都是很常用的命令,相比top、ps等命令优势在于能输出整个Linux/Unix系统的资源使用情况,可以通过此命令发现系统的性能瓶颈。
虚拟内存的定义:在系统中运行的每个进程都需要使用内存将数据给CPU处理,但并不是进程的每时每刻都需要用到分配的内存空间。在Linux内存管理中,主要是通过“调页(paging)"和"交换(swapping)"来完成内存调度,调页算法是将内存中最近不常使用的页面换到磁盘上,把活动页面保留在内存中供进程使用。交换技术是将整个进程,而不是部分页面,全部交换到磁盘上。[root@bogon ~]# vmstat 1 3procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 3 0 0 130812 1008 201816 0 0 57 133 49 87 0 1 99 0 0 0 0 0 130424 1008 201836 0 0 0 0 143 258 4 8 88 0 0 0 0 0 130424 1008 201836 0 0 0 0 29 43 0 0 100 0 0命令中1表示每过1s进行一次采样,单位为秒。命令中3表示采集3次结束进程。**procs** r runing,表示正在运行的进程数量 b 表示正在等待io而睡眠的进程数量,此值与wa的值过大则表示磁盘太慢已成系统性能瓶颈** memory ** swpd 表示已使用虚拟内存(交换分区)的大小 free 表示剩余的内存空间大小,这并不是真正的剩余内存大小,在Linux内存管理中,为了提供更高效的性能,会将一部分剩余的内存作为缓存最常用的文件使用,当进程需要时再释放出来,所以真正的内存剩余空间还需要加上这部分空间 buff 这是内存中的一块区域,当CPU需要写入磁盘时,由于磁盘数度比较慢,所以将数据先写入内存中的buffer,然后CPU再执行其他任务,之后再定期将buffer中的数据写入磁盘。 cache 这也是内存中的一块区域,当CPU需要从磁盘中读取数据时,由于磁盘速度比较慢,所以将数据先写入到cache中,当进程用到该数据时CPU直接从cache中读取,加快访问速度。 buff与cache都是内存中的一块区域,都可以称之为缓存**swap** si swap input,每秒从交换分区写入到内存的大小,由磁盘写入内存 so swap output,每秒从内存写入到交换分区的大小,由内存写入磁盘io bi block input,块设备(一般是磁盘) 写入的大小 bo block output,块设备输出的大小**system** in 每秒CPU的中断次数,包括时间中断 cs 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。us 用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。 sy 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。 id 空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。 wt 等待IO CPU时间。
转载于:https://blog.51cto.com/jying/2053736