Linux运维21:服务器内存过高跟踪思路
Posted YoungerChina
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux运维21:服务器内存过高跟踪思路相关的知识,希望对你有一定的参考价值。
Linux服务器内存使用量超过阈值,触发报警或者OOM。对于线上问题,要进行初步定为和分析,为后面的研发人员分析和解决问题,提供帮助。本文将将此类问题的排查的方法和思路分享给各位,希望对您有所帮助。
1. 问题描述
Linux服务器内存使用量超过阈值,触发报警或者OOM。
2. 问题排查
2.1 第一步
使用free查看内存使用情况
[root@devvm ~]# free
total used free shared buff/cache available
Mem: 24675796 24587144 88652 0 357012 1612488
Swap: 2096472 108224 1988248
[root@devvm ~]#
其中,可以看出内存总量为24675796KB,已使用22617644KB,只剩余2058152KB。
然后,接着通过top命令,shift + M按内存排序后,观察系统中使用内存使用多的进程情况。
在top视图中,可以按b打开或关闭加亮效果,这样更便于观察。在打开加亮的效果之后,可以按x键实现列的加亮效果,同时可以按”shift+>”或者”shift+<”左右改变排序序列。
注:下图仅显示效果,不作为真是图片
2.2 小结
通过如上手段可以看出哪些线程使用的内存比较多
3. 更进一步
通过cat /proc/meminfo观察slab的使用量。
[root@devvm ~]# cat /proc/meminfo
MemTotal: 7990068 kB
MemFree: 7442468 kB
MemAvailable: 7367136 kB
Buffers: 2076 kB
Cached: 109384 kB
……
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 66352 kB
Mapped: 26872 kB
Shmem: 11960 kB
Slab: 72908 kB
SReclaimable: 23592 kB
SUnreclaim: 49316 kB
……
[root@devvm ~]#
如果返现slab比较多,就需要借助slabtop工具查看哪个结构占用的内存比较多,可能发生了内存泄漏.
4. 附录 slabtop
实时显示内核slab内存缓存信息。
4.1 用法
语法:
slabtop [参数]
参数说明:
-d | 每n秒更新一次显示的信息,默认是每3秒 |
-s | 指定排序标准进行排序 |
-o | 显示一次后退出 |
-V | 显示版本 |
-- -help | 显示帮助信息 |
字段排序:(在交互模式,直接按键即可排序)
character description header
a number of active objects ACTIVE
b objects per slab OBJ/SLAB
c cache size CACHE SIZE
l number of slabs SLABS
v number of active slabs N/A
n name NAME
o number of objects OBJS
p pages per slab N/A
s object size OBJ SIZE
u cache utilization USE
4.2 示例
默认按照对象数排序
[root@devvm ~]# slabtop
Active / Total Objects (% used) : 708440 / 710606 (99.7%)
Active / Total Slabs (% used) : 7387 / 7387 (100.0%)
Active / Total Caches (% used) : 72 / 104 (69.2%)
Active / Total Size (% used) : 74129.67K / 74773.73K (99.1%)
Minimum / Average / Maximum Object : 0.01K / 0.10K / 8.00K
OBJS ACTIVE USE OBJ SIZE SLABS OBJ/SLAB CACHE SIZE NAME
137700 137700 100% 0.02K 810 170 3240K fsnotify_mark_connector
129408 129408 100% 0.03K 1011 128 4044K kmalloc-32
92672 92672 100% 0.01K 181 512 724K kmalloc-8
72960 72960 100% 0.02K 285 256 1140K kmalloc-16
49572 49572 100% 0.12K 729 68 5832K kernfs_node_cache
44608 43535 97% 0.06K 697 64 2788K kmalloc-64
31836 31836 100% 0.19K 758 42 6064K dentry
30498 30498 100% 0.04K 299 102 1196K selinux_inode_security
20240 20240 100% 0.58K 368 55 11776K inode_cache
14504 14504 100% 0.07K 259 56 1036K avc_node
11560 11560 100% 0.05K 136 85 544K shared_policy_node
9156 9156 100% 0.19K 218 42 1744K kmalloc-192
8832 8582 97% 0.25K 138 64 2208K kmalloc-256
6272 6272 100% 0.50K 98 64 3136K kmalloc-512
6068 5431 89% 0.21K 164 37 1312K vm_area_struct
3723 3723 100% 0.08K 73 51 292K anon_vma
3696 3696 100% 0.09K 88 42 352K kmalloc-96
3648 3546 97% 1.00K 114 32 3648K kmalloc-1024
3456 3456 100% 0.12K 54 64 432K kmalloc-12
……
在交互模式险,直接按“c”即是按照cache size大小排序。
以上是关于Linux运维21:服务器内存过高跟踪思路的主要内容,如果未能解决你的问题,请参考以下文章