一,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)