top简介

实时监控当前操作系统的负载情况的,每秒刷新一次状态,通常会关注三大指标(CPU、MEM、IO)
    
评判标准    

  • 整体的负载情况,判断标准,如果值非常高,只能告诉我们操作系统很繁忙
    load average: 0.00, 0.00, 0.00    
  • CPU使用情况 :Cpu(s):  0.2%us,  0.2%sy, 99.7%id,  0.0%wa
        %id:   CPU空闲的百分比
        问一个问题?你觉得在一个已投产的系统中ID值是高好还是低好呢?
        一般情况下我们建议,95%以下都算是正常的,但是呢,我们去准备硬件的时候,一般都会预留一部分(3年)硬件配置
        %us:用户程序,占用的CPU时间片的百分比。我们认为us%高是好事,但要在cpu正常能力范围内。
        %sy:系统程序(和内核工作有关),资源调配,资源管理,内核其他功能的管理(system call)
            对于比较成熟的操作系统,对sy%应该是占比很少的。我们认为越少越好。
            如果飙升,可能说明两件事情,1,系统bug;2,中病毒了
        %wa 这个参数越少越好。如果wait高说明了,
                1. IO很慢(速度慢,全表扫描)
                2. 内存满了OOM(内存小,全表扫描)
  • Mem:   4040596k total,  1692536k used,  2348060k free,   152348k buffers
    # total:总的内存量
    # used:已经被使用的内存量
    # free:空闲的内存空间
    # buffer:专门负责操作系统当中,与文件修改类操作有关的内存缓冲区(专门负责写操作的),可以被重复利用的内存区域
    # cached:专门负责操作系统当中,与文件读取有关的缓存区域(专门负责文件读取操作的),
    对于操作系统可用内存量=free+buffer+cached
    # used:used=RSS+anon+buffer+cached
  • Swap:   786428k total,        0k used,   786428k free,   620256k cached
    交换分区,当内存紧张的时候,会将内存区域当中的数据临时置换到SWAP中。
    默认:在内存使用量达到60%
    [root@db02 ~]# cat /proc/sys/vm/swappiness 
    60
    对于MySQL环境,要尽量避免swap使用
    sysctl.conf 
    临时修改:
    [root@db02 ~]# echo 0 >/proc/sys/vm/swappiness 

 

补充:

  1. Linux操作系统内存划分的三大区域:
    RSS:常驻内存集,主要负责程序运行需要的内存区域
    Page Cache:文件系统缓存,主要负责文件有关的缓冲和缓存,buffer+cached
    anon page: 匿名页,主要负责程序之间交互时使用到内存区域
  2. 连续的地址位,定义为了page(页),并且进行了量化。
    (1)基于固定大小page分配模式,他的一些不足的地方?
             在申请内存时,需要整个内存进行遍历
             会有大量的内存碎片,导致程序OOM(out of memory)
    (2)SLAB Allocator内存管理子系统
            1、将内存逻辑化成chain+chunk模式,内存区域会有多条链。每条chain下都“挂着”多个等同大小的chunk(2的幂)
            2、在每条链的头部,都会有一个专门的chunk位图,来更快速的找到需要的空闲chunk,并且记录每个chunk最后被访问的时间戳。
    (3)buddy system(伙伴系统)
            1、提供了多种内存实现回收和整理内存碎片算法,最经典的就是LRU算法。 
            2、当内存free空间紧张时,会触发进行整理或释放,不再使用buffer和cached
     通过以下命令,手工释放所有buffer和cached
     echo 3 > /proc/sys/vm/drop_caches 

 

扩展:

  1. iostat
    iostat 1 10 :每秒获取一次系统io状态,总过获取10次
    iostat -dk 1 10:以kb为单位获取状态
    iostat -dm 1 10:以mb为单位获取状态

    测试当前环境IO水平
    mount /dev/sdb /data
    iostat -dm 1 /dev/sdb
    dd if=/dev/zero of=/data/bigfile

    在优化过程中,我们一般会结合CPU和内存的使用情况看IO状态

    CPU非常繁忙(MYSQL):
            1、user 很高
                再看IO水平,正常情况下IO也会很高
                不正常的情况,user很高,但是IO很低?
                在做大量的计算(多表连接查询、排序、分组、子查询很复杂或者很频繁)
            2、wait 很高,IO很少
                 (1)很有可能是全表扫描
                 (2)IO有问题(RAID规划或者磁盘IO本身问题)

  2. vmstat (请自行学习)

  3. dstat (请自行学习)

最后修改于 2019-09-06 17:46:07
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付
上一篇