需要了解的Linux内存泄漏检测

在实际的项目中,最难缠的问题就是内存泄漏,当然还有panic之类的,内存泄漏分为两部分用户空间的和内核空间的.我们就分别从这两个层面分析一下.
用户空间查看内存泄漏和解决都相对简单。定位问题的方法和工具也很多相对容易.我们来看看.
1. 查看内存信息
cat /proc/meminfo、free、cat /proc/slabinfo等
2. 查看进程的状态信息
top、ps、cat /proc/pid/maps/status/fd等
通常我们定位问题先在shell下ps查看当前运行进程的状态,嵌入式上可能显示的信息会少一些.
点击(此处)折叠或打开
root@hos-machine:~#ps-uaxw
user pid %cpu %mem vsz rss tty statstarttime command
root 1 0.0 0.1 119872 3328?ss 8月10 0:24/sbin/init splash
root 2 0.0 0.0 0 0?s8月10 0:00[kthreadd]
root 3 0.0 0.0 0 0?s8月10 0:44[ksoftirqd/0]
root 5 0.0 0.0 0 0?s<8月10 0:00[kworker/0:0h]
root 7 0.0 0.0 0 0?s8月10 3:50[rcu_sched]
root 8 0.0 0.0 0 0?s8月10 0:00[rcu_bh]
root 9 0.0 0.0 0 0?s8月10 0:12[migration/0]
root 10 0.0 0.0 0 0?s8月10 0:01[watchdog/0]
root 11 0.0 0.0 0 0?s8月10 0:01[watchdog/1]
root 12 0.0 0.0 0 0?s8月10 0:12[migration/1]
root 13 0.0 0.0 0 0?s8月10 1:18[ksoftirqd/1]
root 15 0.0 0.0 0 0?s<8月10 0:00[kworker/1:0h]
root 16 0.0 0.0 0 0?s8月10 0:01[watchdog/2]
root 17 0.0 0.0 0 0?s8月10 0:12[migration/2]
root 18 0.0 0.0 0 0?s8月10 1:19[ksoftirqd/2]
root 20 0.0 0.0 0 0?s<8月10 0:00[kworker/2:0h]
root 21 0.0 0.0 0 0?s8月10 0:01[watchdog/3]
root 22 0.0 0.0 0 0?s8月10 0:13[migration/3]
root 23 0.0 0.0 0 0?s8月10 0:41[ksoftirqd/3]
root 25 0.0 0.0 0 0?s<8月10 0:00[kworker/3:0h]
root 26 0.0 0.0 0 0?s8月10 0:00[kdevtmpfs]
root 27 0.0 0.0 0 0?s<8月10 0:00[netns]
root 329 0.0 0.0 0 0?s<8月10 0:00[ext4-rsv-conver]
root 339 0.0 0.0 0 0?s<8月10 0:05[kworker/1:1h]
root 343 0.0 0.0 0 0?s<8月10 0:11[kworker/3:1h]
root 368 0.0 0.0 39076 1172?ss 8月10 0:10/lib/systemd/systemd-journald
root 373 0.0 0.0 0 0?s8月10 0:00[kauditd]
root 403 0.0 0.0 45772 48?ss 8月10 0:01/lib/systemd/systemd-udevd
root 444 0.0 0.0 0 0?s/proc/sys/vm/drop_caches
to free dentriesandinodes:
echo2>/proc/sys/vm/drop_caches
to free pagecache,dentriesandinodes:
echo3>/proc/sys/vm/drop_caches
asthisis a non-destructive operationanddirty objects arenotfreeable,the user should run `sync`first
用户空间内存检测也可以通过mtrace来检测用法也非常简单,之前文章我们有提到过. 包括比较有名的工具valgrind、以及dmalloc、memwatch等.各有特点.
内核内存泄露的定位比较复杂,先判断是否是内核泄露了,然后在具体定位什么操作,然后再排查一些可疑的模块,内核内存操作基本都是kmalloc
即通过slab/slub/slob机制,所以如果meminfo里slab一直增长那么很有可能是内核的问题.我们可以更加详细的查看slab信息
cat /proc/slabinfo
如果支持slabtop更好,基本可以判断内核是否有内存泄漏,并且是在操作什么对象的时候发生的。
点击(此处)折叠或打开
cat /proc/slabinfo
slabinfo-version:2.1
#name:tunables:slabdata
fuse_request 0 0 288 28 2:tunables 0 0 0:slabdata 0 0 0
fuse_inode 0 0 448 18 2:tunables 0 0 0:slabdata 0 0 0
fat_inode_cache 0 0 424 19 2:tunables 0 0 0:slabdata 0 0 0
fat_cache 0 0 24 170 1:tunables 0 0 0:slabdata 0 0 0
在内核的配置中里面已经支持了一部分memleak自动检查的选项,可以打开来进行跟踪调试.
这里没有深入的东西,算是抛砖引玉吧~.

苹果终于推出iOS10.3.1d的正式更新,还有惊喜!
介绍2020年值得关注的五款创新型AI软件,分享机器学习的应用成果
迪慕恩珠宝基于区块链技术,以储备钻石作为担保进行价值映射
Nutanix 对业务数据进行深入挖掘和智能化分析,加速建设新型智慧医院
华为高品质AirEngine Wi-Fi产品打造极致体验的全无线网络
需要了解的Linux内存泄漏检测
贸泽电子2022 Empowering Innovation Together系列第二期 带您探索沉浸式技术
小米MIX 2s跑分曝光:搭载骁龙845+隐形指纹
国芯思辰 |8/16通道ADC SC1644在万用表中的应用,性能兼容AD7173
关于RISC-V 5大潜力和优势
又一大厂发力RISC-V,Meta第一代自研AI加速器MTIA
Facebook离职潮 Oculus创始人离职原因或在扎克伯格
老款特斯拉Model S/X频繁出现闪存超负荷擦写
Docker容器和Kubernetes退出码中文指南
迷你键盘制作图解
三星Note8什么时候上市?三星Note8最新消息:三星Note8被迫提前发布,有理有据两个原因导致!
德州仪器(TI)近日推出其最新的SimpleLink无线和有线微控制器(MCU)
科伦特致力于成为世界级LED商用显示系统服务商
亚马逊公布了2018年Q4季度财报,AWS取得强劲业绩!
汽车行业能否跨越半导体“傻瓜的围墙”?