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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM