zoukankan      html  css  js  c++  java
  • centos8平台使用slabtop监控slab内存的状态

    一,slabtop 所属的包:

    [root@yjweb ~]# whereis slabtop
    slabtop: /usr/bin/slabtop /usr/share/man/man1/slabtop.1.gz
    
    [root@yjweb ~]# rpm -qf /usr/bin/slabtop
    procps-ng-3.3.15-1.el8.x86_64

    如果找不到命令,可以用yum进行安装: 

    [root@yjweb ~]# yum install procps-ng

    说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest

             对应的源码可以访问这里获取: https://github.com/liuhongdi/

     说明:作者:刘宏缔 邮箱: 371125307@qq.com

    二,什么是slab?

    slab是Linux操作系统的一种内存分配机制

    针对一些经常分配并释放的对象,这些对象的大小一般比较小,

    slab分配器是基于对象进行管理的,相同类型的对象归为一类,

    因为对象释放后直接保存在内存中,当请求新的对象时,

    可以从内存中直接获取

    说明:这些对象包括inode信息,目录项信息等

    slabtop的作用:

    显示实时内核slab缓存信息,给出slab使用情况和汇总

    三,查看版本:

    [root@yjweb ~]# slabtop --version
    slabtop from procps-ng 3.3.15

    四,常见用法:

     1,按cache大小倒排:

    [root@yjweb ~]# slabtop -s c 

    说明: -s:指定排序字段

    有哪些排序字w

    The following are valid sort criteria:

     a: sort by number of active objects

     b: sort by objects per slab

     c: sort by cache size

     l: sort by number of slabs

     v: sort by number of active slabs

     n: sort by name

     o: sort by number of objects (the default)

     p: sort by pages per slab

     s: sort by object size

     u: sort by cache utilization

    五,输出信息各字段的意义:

    我们以xfs_inode为例:

     OBJS ACTIVE  USE OBJ SIZE  SLABS OBJ/SLAB CACHE SIZE NAME
    96000  91833  95%    1.00K   6000       16     96000K xfs_inode 

    共  6000个slab

    每个slab包含16个对象

    共 96000个对象

    对象的size是1K

    所以CACHE SIZE是96000K

    ACTIVE #:指对象中活跃的数量

    CACHE SIZE  #:是占用的内存大小

    NAME   #:内存项的名字

    汇总信息中:

    Active / Total Size (% used)       : 390763.29K / 406922.94K (96.0%)

    这一项是slab活跃项占用内存的大小/总的内存使用的大小

    六,发现slab占用内存过高时,如何手动释放slab内存?

    sync
    echo 1 > /proc/sys/vm/drop_caches
    echo 2 > /proc/sys/vm/drop_caches
    echo 3 > /proc/sys/vm/drop_caches

    说明:

    sync:用来确保文件系统的完整性:

    sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-Node、已延迟的块 I/O 和读写映射文件

    参照这段原始文档:

    To free pagecache:
    * echo 1 > /proc/sys/vm/drop_caches
    
    To free dentries and inodes:
    * echo 2 > /proc/sys/vm/drop_caches
    
    To free pagecache, dentries and inodes:
    * echo 3 > /proc/sys/vm/drop_caches

    因为 3代表释放 pagecache,dentries,inodes 三项,所以只执行3应该也可以

    七,什么是dentries?

    dentry_cache是目录项高速缓存,它记录了目录项到inode的映射关系。

    当应用程序发起stat系统调用时,就会创建对应的dentry_cache项,

    如果每次stat的文件都是不存在的文件,那么总是会创建大量新的dentry_cache项

    八,什么是inode?

    inode包含文件的元信息,具体来说有以下内容:

      * 文件的字节数

      * 文件拥有者的User ID

      * 文件的Group ID

      * 文件的读、写、执行权限

      * 文件的time,共三个:

                 ctime:inode上一次变动的时间,

                 mtime指文件内容上一次变动的时间

                 atime指文件上一次打开的时间。

      * 链接数,即有多少文件名指向这个inode

      * 文件数据block的位置

             说明:block对应到磁盘的扇区

    九,查看centos的版本 

    [root@yjweb ~]# cat /etc/redhat-release
    CentOS Linux release 8.0.1905 (Core)
  • 相关阅读:
    尾递归优化
    EOS Dawn 3.0 智能合约 -- 新格式
    以太坊钱包初探
    理解以太坊的椭圆曲线签名-校验签名
    以太坊交易字段
    以太坊的账户和交易
    以太坊源码探究之交易与签名
    以太坊交易签名
    L05 Laravel 教程
    thinkphp3.2配置redis缓存和文件缓存
  • 原文地址:https://www.cnblogs.com/architectforest/p/12575732.html
Copyright © 2011-2022 走看看