【性能工具专题】内存分析工具之smem使用深度解析

缘起

问题的源头是技术交流群中有位同学问如何排查一个内存占用问题。

我有个机器buffer/cache占用内存特别多,导致available内存不够了,有啥查看的方法没?
主要问题在于:就是找了半天没找到内存在哪被占用了

[root@mix-13 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           125G        1.2G        1.0G        122G        123G        464M
Swap:            0B          0B          0B
[root@mix-13 ~]# cat /proc/meminfo 
MemTotal:       131338164 kB
MemFree:         1077164 kB
MemAvailable:     467944 kB
Buffers:            9344 kB
Cached:         128550504 kB
SwapCached:            0 kB
Active:           613668 kB
Inactive:       128433176 kB
Active(anon):     497864 kB
Inactive(anon): 128151348 kB
Active(file):     115804 kB
Inactive(file):   281828 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:               492 kB
Writeback:             0 kB
AnonPages:        487100 kB
Mapped:           237252 kB
Shmem:          128171596 kB
Slab:             906596 kB
SReclaimable:     488948 kB
SUnreclaim:       417648 kB
KernelStack:       25744 kB
PageTables:        10848 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    65669080 kB
Committed_AS:   136093504 kB
VmallocTotal:   34359738367 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
Percpu:            24576 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:               0 kB
DirectMap4k:      582656 kB
DirectMap2M:    18913280 kB
DirectMap1G:    116391936 kB

方案一

有人给出建议:
在这里插入图片描述
但是仍然找不到:
在这里插入图片描述

可以思考下,为什么这种方法不行??

方案二

接着,又有人给出了答案
在这里插入图片描述
查共享内存占用情况。

有没有更方便的方案呢?

方案三

大杀器smem工具。
在这里插入图片描述
它可以统计的比较详细。

$ smem -t -U root -k

在这里插入图片描述
非常直观了。

后话

这里将smem推荐给大家,在遇到内存问题时,可以第一时间考虑用它来快速查看内存使用情况。
那么smem的各个参数都是什么意思呢?

在Linux中,smem是一个用于查看系统内存使用情况的命令行工具。当使用smem命令时,它将返回一个内存使用情况报告,其中包括一些缩写词,如PSS、USS和RSS。这些词代表以下内容:

  • PSS (Proportional Set Size):是所有共享库和代码的实际占用的内存总量,按照每个进程实际使用的内存进行分配。
  • USS (Unique Set Size):是进程独自使用的内存总量,不包括共享库和代码的内存。换句话说,USS是进程私有的部分占用的内存。
  • RSS (Resident Set Size):是进程当前驻留在RAM中的物理内存总量。

因此,PSS表示进程当前使用的内存量,其中包括共享库和代码的内存;USS表示进程独自使用的内存量,不包括共享库和代码的内存;RSS表示进程当前在RAM中驻留的物理内存总量,它包括进程所使用的所有内存,包括共享内存、私有内存和页缓存。

这三个值的区别在于计算方式和涵盖的内存内容。PSS和USS可以帮助您识别和调试共享内存问题,而RSS可以帮助您了解进程实际使用的物理内存量。如果您需要更深入地了解进程的内存使用情况,则可以查看PSS、USS和RSS值的详细报告,以识别问题并进行调试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值