vmstat 命令详解
概述
vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、IO、系统、CPU活动进行监控。
vmstat 命令
-V:显示vmstat版本信息。 -n:只在开始时显示一次各字段名称。 -a:显示活跃和非活跃内存 -d:显示磁盘相关统计信息。 -p:显示指定磁盘分区统计信息 -s:显示内存相关统计信息及多种系统活动数量。 -m:显示slabinfo -S:使用指定单位显示。参数有 k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(byte)。默认单位为K(1024 bytes) -f:显示从系统启动至今的fork数量 。
delay:刷新时间间隔。 count:刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷。
vmstat 命令说明
该命令默认显示监控5部分:procs、memory、swap、io、system、cpu信息。具体列信息说明如下:
Procs(进程)
r: 等待运行的进程数 b: 处在非中断睡眠状态的进程数
Memory(内存) 单位:KB
swpd: 虚拟内存使用大小 free: 空闲的内存 buff: 用作缓冲的内存大小 cache: 用作缓存的内存大小
Swap (单位:KB)
si: 从交换区写到内存的大小 so: 每秒写入交换区的内存大小
IO (单位:块/秒)
bi: 每秒读取的块数 bo: 每秒写入的块数
System (系统)
in: 每秒中断数,包括时钟中断。 cs: 每秒上下文切换数。
CPU(以百分比表示):
us: 用户进程执行时间(user time) sy: 系统进程执行时间(system time) id: 空闲时间(包括IO等待时间),中央处理器的空闲时间 。以百分比表示。 wa: 等待IO时间
使用示例
1. 不使用参数
如果使用vmstat命令不使用参数,那么只显示一条监控信息
2. 间隔1秒
如果只使用一个间隔时间参数,那么,vmstat会每秒钟打印一条监控信息,直到手动关闭监控程序为止。
2. 每隔1秒打印一条,总共打印5条
vmstat 命令实战
通过运行下面程序,使用vmstat进行监控
public class VMStat {
public static void main(String[] args) {
String type = "0";
if (args.length>0) {
type = args[0];
}
test(type);
}
public static void test(String type) {
if ("1".equals(type)) {
new Thread(new ThreadSwitchTask()).start();
new Thread(new ThreadSwitchTask()).start();
} else if ("2".equals(type)) {
new Thread(new IOTask()).start();
} else if ("3".equals(type)) {
new Thread(new IOTask()).start();
} else {
new Thread(new ThreadSwitchTask()).start();
new Thread(new ThreadSwitchTask()).start();
new Thread(new IOTask()).start();
new Thread(new BusyCPUTask()).start();;
}
}
public static class ThreadSwitchTask implements Runnable {
@Override
public void run() {
while (true) {
try {
TimeUnit.MILLISECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
Thread.yield();
}
}
}
public static class IOTask implements Runnable {
@Override
public void run() {
while (true) {
try (FileOutputStream fos = new FileOutputStream(new File("file.txt"))) {
for (int i = 0; i < Integer.MAX_VALUE; i++) {
fos.write(i);
}
} catch (Exception e) {
e.printStackTrace();
}
try (FileInputStream fos = new FileInputStream(new File("file.txt"))) {
while (fos.read() != -1);
TimeUnit.SECONDS.sleep(2);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
public static class BusyCPUTask implements Runnable{
@Override
public void run() {
while(true){
double d = new Random().nextDouble() * new Random().nextDouble();
}
}
}
}
type=“1”;测试线程上下文切换。 type=“2”;测试IO读写 type=“3”;测试CPU运算能力
type=“1”
当执行 ThreadSwitchTask 类时,发现线程上下文切换明显增加。
type=“2”
当执行IOTask类时,可以看出像磁盘中写入了2W多个磁盘块。 发现读的时候没有从磁盘中读取,是因为该文件在内存也存在一份,导致直接从内存中读取。
type=“3”
当执行BusyCPUTask类的时候,发现id空闲的cpu变成了50%了,因为我电脑是是双核CPU。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 浙大版《C语言程序设计(第3版)》题目集 习题2-2 阶梯电价
- 浙大版《C语言程序设计(第3版)》题目集 习题2-3 求平方与倒数序列的部分和
- 浙大版《C语言程序设计(第3版)》题目集 习题2-4 求交错序列前N项和
- 二十五块DIY 带屏幕可远程的温湿度传感器
- 浙大版《C语言程序设计(第3版)》题目集 习题2-5 求平方根序列前N项和
- 浙大版《C语言程序设计(第3版)》题目集 习题2-6 求阶乘序列前N项和
- 案例:ADG环境遇到redo日志member路径有误以及RMAN-6571错误
- 浙大版《C语言程序设计(第3版)》题目集 练习3-2 计算符号函数的值
- 浙大版《C语言程序设计(第3版)》题目集 练习3-3 统计学生平均成绩与及格人数
- 浙大版《C语言程序设计(第3版)》题目集 练习3-4 统计字符
- SQL 语句单引号、双引号的用法
- 浙大版《C语言程序设计(第3版)》题目集 练习3-5 输出闰年
- 浙大版《C语言程序设计(第3版)》题目集 练习3-7 成绩转换
- 浙大版《C语言程序设计(第3版)》题目集 练习3-8 查询水果价格
- 浙大版《C语言程序设计(第3版)》题目集 习题3-1 比较大小