FreeBSD vmstat详解(附例子)

top是给Linux设计的。在FreeBSD VM里面的Free概念和其他OS完全不同,使用top查看Free内存对于FreeBSD来说可以说没什么意义。正确的方法是看vmstat。

 # vmstat  procs   memory          page                       disk   faults     cpu  r b w   avm    fre      flt  re  pi   po   fr   sr ad0    in    sy   cs    us  sy id  0 2 1   270512   20316  30   0   0    0    26   5  1223   1589  98   593   1   1  99

最好使用vmstat t [n]命令,例如 vmstat 5 10,表示在t(5)秒时间内进行n(10)次采样。如果只使用vmstat,无法反映真正的系统情况。

procs:
r-->在运行的进程数
  b-->在等待io的进程数(等待i/o,paging等等)
  w-->可以进入运行队列但被替换的进程
memoy(以kb为单位,包括虚拟内核和真实内存,正在运行或最近20秒在运行的进程所用的虚拟内存将被视为active)
  avm-->活动的虚拟内存
  free-->空闲的内存
pages(统计错误页和活动页,每5秒平均一下,以秒为单位给出数值)
  flt-->错误页总数
  re-->回收的页面
  pi-->进入页面数
  po-->出页面数
  fr-->空余的页面数
  sr-->每秒通过时钟算法扫描的页面
disk 显示每秒的磁盘操作(磁盘名字的前两个字母加数字,默认只显示两个磁盘,如果有多的,可以加-n来增加数字或在命令行下把磁盘名都填上。)

fault 显示每秒的中断数
  in-->设备中断
  sy-->系统中断
  cs-->cpu交换(上下文切换)
cpu 表示cpu的使用状态
  cs-->用户进程使用的时间
  sy-->系统进程使用的时间
  id-->cpu空闲的时间

如果 r经常大于 4 ,且id经常少于40,表示cpu的负荷很重。
如果pi,po 长期不等于0,表示内存不足。
如果disk 经常不等于0, 且在 b中的队列 大于3, 表示 io性能不好。

以下是一个繁忙批量插入MySQL数据(大概每隔20秒可以插入50万多条数据)的vmstat例子:

 procs      memory      page                    disks     faults         cpu r b w     avm    fre   flt  re  pi  po    fr  sr da0 da1   in   sy   cs us sy id 1 0 63  23302M   803M   845   0   0   0     0   0   0   0   17  124  499  6  0 94 1 0 63  23302M   796M   837   0   0   0     2   0   1   0   18  158  505  6  0 94 1 0 63  23302M   790M   833   0   0   0     6   0  76   0  159  143  910  6  0 94 1 0 63  23302M   784M   868   0   0   0    16   0   8   0   34  156  550  6  0 94 2 0 63  23456M   709M  8317   2   0   0  2383   0  95   0  295 5504 1930  8  1 91 1 0 63  21975M  1281M 18909   3   0   0 94840   0 620   0 1893 64333 7822 10  4 87 1 0 63  21975M  1281M   415   0   0   0   342   0   1   0   29  611  566  6  0 94 1 0 63  22093M   978M 43503   0   0   0  5140   0 2187   0 4225  582 16279  6  2 92

循环插入到了后面,随着表越来越大,系统调用和上下文切换越来越频繁:

 procs      memory      page                    disks     faults         cpu r b w     avm    fre   flt  re  pi  po    fr  sr da0 da1   in   sy   cs us sy id 1 0 63  23233M   536M 28219   0   0   0   352 51252 869   0 1864 14542 11015  2  3 95 1 0 63  23349M   834M 12457   0   0   0     4 51247 2078   0 3945  179 14926  6  2 92 2 0 63  27343M  3130M  9295   0   0   0  2708   0   2      0   73 6988 1377   7  1 92 ....中间比较正常,因为插入时间比较久 1 0 63  28788M  2934M 25760   0   0   0  5860   0   620   8 5529 42712 12924 11  2 86 0 0 63  25963M  3081M  4379   0   0   0 24049   0   3445  15 11274 97350 31798  2  7 91 0 0 63  33689M  1801M   388   0   0   0  4492   0 4403  15 8780 135421 35502  2  5 93

不熟悉mysql内部机制,但是很明显,随着表越来越大,表插入速度越来越慢,因为系统调用和上下文切换越来越频繁了,浪费了很多CPU时间。
到了mysql表里有六千万多条数据时,每插入五十万条记录,已经要耗时100s,整个mysql数据库变得很繁忙,一些几万数据的插入也慢慢不能及时处理。

以下是一个拷贝4G文件到远程NFS的vmstat例子:

 procs      memory      page                    disks     faults         cpu r b w     avm    fre   flt  re  pi  po    fr  sr da0 da1   in   sy   cs us sy id 2 0 63  19731M  2400M 24415   0   0   0 70077   0  14   0  591 3915 1770 12  1 87 0 0 63  16352M  3594M   443   0   0   0 154948   0 2471   0 5067 17602 19448  1  2 96 0 0 63  16352M  3594M     0   0   0   0     0   0 772   0 1590  134 6577  0  0 100 0 0 63  16352M  3594M     0   0   0   0     0   0 856   0 1750  164 7135  0  0 100 0 0 63  16361M  3594M  1112   0   0   0  1030   0 400   0  815 1248 3620  0  0 100 0 0 63  16361M  3594M     0   0   0   0     0   0   0   0   15  116  488  0  0 100 0 0 63  16352M  3594M   329   0   0   0   352   0 2186   0 4275  595 15809  0  2 98 0 0 63  16352M  3594M     0   0   0   0     0   0 270   0  532  134 3186  0  0 100 0 0 63  16352M  3594M     0   0   0   0     0   0 185   0  368  164 2062  0  0 100

最后稳定下来,状态良好的vmstat例子:

 procs      memory      page                    disks     faults         cpu r b w     avm    fre   flt  re  pi  po    fr  sr da0 da1   in   sy   cs us sy id 0 0 63  16292M  3564M     0   0   0   0     0   0   0   0   12  142  472  0  0 100
时间: 2024-11-06 11:15:31

FreeBSD vmstat详解(附例子)的相关文章

linux wget 命令用法详解(附实例说明)

Linux wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件或从远程服务器恢复备份到本地服务器.如果我们使用虚拟主机,处理这样的事务我们只能先从远程服务器下载到我们电脑磁盘,然后再用ftp工具上传到服务器.这样既浪费时间又浪费精力,那不没办法的事.而到了Linux VPS,它则可以直接下载到服务器而不用经过上传这一步.wget工具体积小但功能完善,它支持断点下载功能,同时支持FTP和HTTP下载方式,支持代理服务器和设置起来

vmstat详解

1.vmstat详解 查看cpu负载 2.使用方法 vmstat 显示内容详解 procsr 列表示运行和等待cpu时间片的进程数,如果长期大于1,说明cpu不足,需要增加cpu.b 列表示在等待资源的进程数,比如正在等待I/O.或者内存交换等.cpu 表示cpu的使用状态us 列显示了用户方式下所花费 CPU 时间的百分比.us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,需要考虑优化用户的程序.sy 列显示了内核进程所花费的cpu时间的百分比.这里us + sy的参考

挂钩SSDT详解附源代码

源代码下载地址:挂钩SSDT源代码 据微软所言,服务描述符表是一个由四个结构组成的数组,其中的每一个结构都是由四个双字项组成.因此,我们可以将服务描述符表表示为: typedef struct ServiceDescriptorTable { SDE ServiceDescriptor[4]; }SDT; 其中,其中的每一个服务描述符呈现出四个双字的形式,它的结构为: #pragma pack(1) typedef struct ServiceDescriptorEntry { unsigned

LR杂记 - Linux系统监控工具之vmstat详解

题意:求一个无向图的,去掉两个不同的点后最多有几个连通分量. 思路:枚举每个点,假设去掉该点,然后对图求割点后连通分量数,更新最大的即可.算法相对简单,但是注意几个细节: 1:原图可能不连通. 2:有的连通分量只有一个点,当舍去该点时候,连通分量-1: 复习求割点的好题! #include<iostream> #include<cstdio> #include<vector> using namespace std; int n,m; vector<vector&

NFS服务器原理和安装配置详解附案例演练

NFS服务器原理和安装配置详解附案例演练 1.什么是NFS服务器 NFS就是Network File System的缩写,它最大的功能就是可以通过网络,让不同的机器.不同的操作系统可以共享彼此的文件. NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样,在使用上相当便利: 2.NFS挂载原理 NFS服务器的挂载结构图: 如上图示: 当我们在NFS服务器设置好一个共享目录/home/public后

Lambda表达式详解(例子详解)(转自:http://blog.csdn.net/damon316/article/details/51734661)

Lambda表达式详解(例子详解) lambda简介 lambda运算符:所有的lambda表达式都是用新的lambda运算符 " => ",可以叫他,"转到"或者 "成为".运算符将表达式分为两部分,左边指定输入参数,右边是lambda的主体. lambda表达式: 1.一个参数:param=>expr 2.多个参数:(param-list)=>expr 上面这些东西,记着,下面我们开始应用并阐述lambda,让你乐在其中.

Java 序列化Serializable详解(附详细例子)

Java 序列化Serializable详解(附详细例子) 1.什么是序列化和反序列化Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程.   2.什么情况下需要序列化 a)当你想把的内存中的对象保存到一个文件中或者数据库中时候:b)当你想用套接字在网络上传送对象的时候:c)当你想通过RMI传输对象的时候: 3.如何实现序列化 将需要序列化的类实现Serializable接口就可以了,Seriali

Protocol Buffers编码详解,例子,图解

本文不是让你掌握protobuf的使用,而是以超级细致的例子的方式分析protobuf的编码设计.通过此文你可以了解protobuf的数据压缩能力来自什么地方,版本兼容如何做到的,其Key-Value编码的设计思路.如果你详细了解此文,你应该就能具备自己造一套编解码轮子的能力(至少基本思路). 测试的例子 阅读图片时请对比前面的例子和表格.每个字段的名称都是包含了tag的. message S2 { optional int32 s2_1 = 1; optional string s2_2 =

Windows WMIC命令使用详解(附实例)

第一次执行WMIC命令时,Windows首先要安装WMIC,然后显示出WMIC的命令行提示符.在WMIC命令行提示符上,命令以交互的方式执行 执行“wmic”命令启动WMIC命令行环境.这个命令可以在XP或 .NET Server的标准命令行解释器(cmd.exe).Telnet会话或“运行”对话框中执行.这些启动方法可以在本地使用,也可以通过.NET Server终端服务会话使用. 第一次执行WMIC命令时,Windows首先要安装WMIC,然后显示出WMIC的命令行提示符.在WMIC命令行提