slab 内存泄漏

kernel log 出现 lowmemorykiller 判断 kernel 出现了内存泄漏

  1. 多次测试后对比 procrank 数据 寻找内存泄漏可能的原因(procrank :给出了系统整体的内存占用情况)
    adb root
    adb shell procrank > C:\procrank.txt
    测试前:
    RAM: 1814588K total, 359780K free, 7372K buffers, 701496K cached, 964K shmem, 138804K slab
    测试后:
    RAM: 1814588K total, 229016K free, 10204K buffers, 710408K cached, 1056K shmem, 146024K slab
    发现 slab 明显的增大。
  2. 查看slabinfo 确定泄漏地方
    adb shell pcat /proc/slabinfo > C:\slabinfo.txt
    测试前:
kmalloc-8192         180    180   8192    4    8 : tunables    0    0    0 : slabdata     45     45      0
kmalloc-4096         203    232   4096    8    8 : tunables    0    0    0 : slabdata     29     29      0
kmalloc-2048         576    576   2048   16    8 : tunables    0    0    0 : slabdata     36     36      0
kmalloc-1024        1072   1072   1024   16    4 : tunables    0    0    0 : slabdata     67     67      0
kmalloc-512         1534   1568    512   16    2 : tunables    0    0    0 : slabdata     98     98      0
kmalloc-256        12937  13104    256   16    1 : tunables    0    0    0 : slabdata    819    819      0
kmalloc-128        50144  50144    128   32    1 : tunables    0    0    0 : slabdata   1567   1567      0

测试后:

kmalloc-8192         181    184   8192    4    8 : tunables    0    0    0 : slabdata     46     46      0
kmalloc-4096         232    232   4096    8    8 : tunables    0    0    0 : slabdata     29     29      0
kmalloc-2048         608    608   2048   16    8 : tunables    0    0    0 : slabdata     38     38      0
kmalloc-1024        1082   1104   1024   16    4 : tunables    0    0    0 : slabdata     69     69      0
kmalloc-512         3856   3856    512   16    2 : tunables    0    0    0 : slabdata    241    241      0
kmalloc-256        14447  14992    256   16    1 : tunables    0    0    0 : slabdata    937    937      0
kmalloc-128        48967  49888    128   32    1 : tunables    0    0    0 : slabdata   1559   1559      0

发现明显的增大。

  1. 打开kernel 调试功能
    重新配置kernel选项,打开如下选项即可。
    CONFIG_SLUB=y
    CONFIG_SLUB_DEBUG=y
    CONFIG_SLUB_DEBUG_ON=y
    之后进行测试:
  2. 查看异常kmem_cache 的统计信息
    cat > /sys/kernel/slab/kmalloc-256/alloc_calls 或者free_calls
  3. 查看每次的申请或释放的调用栈
    echo 1 > /sys/kernel/slab/kmalloc-256/trace

通过上述 log 进一步分析出错的地方

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值