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:服务器内存过高跟踪思路的主要内容,如果未能解决你的问题,请参考以下文章

linux中内存占用率过高,如图

Linux系统CPU/内存使用率过高的问题排查

服务器CPU使用率过高排查与解决思路

linux内存占用率过高怎么办

Linux中Cache内存占用过高解决办法

Linux中Cache内存占用过高解决办法