• 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



  • 相关阅读:
    Spark开发-SparkUDAF(二)
    Spark开发-Spark UDAF(一)
    Spark开发-Spark中类型安全UDAF开发示例
    Spark开发_构建TypeSafe的Dataset
    布隆过滤器(Bloom Filter)
    一个 Spark 应用程序的完整执行流程
    Spark的RPC
    Spark调优
    Hbase系列文章
    Flink怎么做到精确一次的?
  • 原文地址:https://www.cnblogs.com/ggjucheng/p/2315603.html
Copyright © 2020-2023  润新知