1.内存泄漏

确定现象:

linux 内存泄漏,可以查看slabinfo 和另外一个proc下(貌似meminfo),关于内存的信息,可以看到内存是否在不断减少,以及减少的速度。

vxworks系统,内存是否有相关信息???

如果快速泄漏内存,则较容易判断。如果是非常慢的,则要经过一定时间场景复现后,应该也能看出来。

linux在内存耗光后,会有log打印。容易判断。vxworks待试验。

在确认存在内存泄漏后,如何确认泄漏源头?

malloc做修改,使其记录相关信息 ---- 当前是否此功能。没有就当没说。

复现场景。在什么场景下会泄漏,具体点,哪个任务在跑是会泄漏,由此确认。

【 具体方法补充】

Linux在内存使用上的原则是:如果内存充足,不用白不用,尽量使用内存来缓存一些文件,从而加快进程的运行速度,而当内存不足时,会通过相应的内存回收策略收回cache内存,供进程使用。

可通过对proc下进程相关的文件进行分析,精确评估系统消耗内存的大小,还可以对内存泄露类问题的解决提供一种定位手段。

一、系统总内存的分析

可以从proc目录下的meminfo文件了解到当前系统内存的使用情况汇总,其中可用的物理内存=memfree+buffers+cached,当memfree不够时,内核会通过回写机制(pdflush线程)把cached和buffered内存回写到后备存储器,从而释放相关内存供进程使用,或者通过手动方式显式释放cache内存:

echo 3 > /proc/sys/vm/drop_caches

通过cat /proc/meminfo 查看内存使用情况。

二、进程使用内存的统计

在32位操作系统中,每个进程拥有4G的虚拟内存空间,其中0~3GB是每个进程的私有用户空间,这个空间对系统中其他进程是不可见的。3~4GB是linux内核空间,由系统所有的进程以及内核所共享的。通过访问/proc/{pid}/下相关文件,可以了解每个线程虚拟内存空间的使用情况,从而了解每个线程所消耗内存的多少。

由于我们的产品都是使用多线程方式实现的,多个线程共享一个进程的用户态虚拟地址空间,虚拟地址空间包含若干区域,主要有如下几个区域:

1、当前执行文件的代码段,该代码段称为text段。

2、执行文件的数据段,主要存储执行文件用到的全局变量,静态变量。

3、存储全局变量和动态产生的数据的堆。

4、用于保存局部变量和实现函数调用的栈。

5、采用mmap方式映射到虚拟地址空间中的内存段

所以只需要查看任意一个线程的用户态虚拟地址空间分配即可知道属于同一进程的所有线程占用总内存的大小。可以通过查看/proc/{pid}/maps文件来获取相关的虚拟地址空间内容

如果在实际的调试过程中,怀疑某处发生了内存泄露,可以查看该进程的maps表,看进程的堆段或者mmap段的虚拟地址空间是否持续增加,如果是,说明很可能发生了内存泄露,如果mmap段虚拟地址空间持续增加,还可以看到各个段的虚拟地址空间的大小,从而可以确定是申请了多大的内存,对调试内存泄露类问题可以起到很好的定位作用。

2.踩内存。

1)预先分配的内存被踩。比如共享内存,axi_mem。有可能是其他核或当前核的不同启动阶段。

先确认分配是否有问题,分配空间是否重叠。如果在边界,则重点怀疑相邻区域。

也可能公共IP资源的寄存器,被胡乱修改,如果在当前核未做写操作时,寄存器被改“写”,则应该是其他核干的。

2)系统内部,一个核的系统运行,普通的内存。

不好弄。可以尝试打条件断点。被踩后错误的值是多少,合理的值是多少。

是不是被自己模块内的数组越界等原因所踩。

如果是因为为初始化指针访问,导致向随机地址上写,不用太担心,因为更大可能是data abort。

用处不大。。

linux踩内存怎么定位,问题定位:内存泄漏,踩内存。相关推荐

  1. linux 定位 踩内存_记录一次用户态踩内存问题

    这几天在做总结,把三年前写的一个定位案例,翻了出来.回想起定位这个问题时的场景,领导催得紧,自己对很多东西又不熟悉,所以当时面临的压力还是很大的.现在回想起来感慨还是很多的,我们在遇到任何一个问题,一 ...

  2. linux下内存的统计和内存泄露问题的定位-转

    在产品的开发中,通过对当前系统消耗内存总量的统计,可以对产品所需内存总量进行精确的评估,从而选择合适的内存芯片与大小,降低产品的成本.在遇到内存泄露类问题时,经常会对此束手无策,本文通过对proc下进 ...

  3. linux下使用命令行辅助定位内存泄漏问题

    文章目录 前言 一.free命令: 命令 内容解释 其它 二.top命令 命令 其它 三. cat /proc/$pid/status 命令 内容解释 总结 前言 最近自己正在做的一款产品,因内存泄漏 ...

  4. 7 php 内存泄漏_PHP 内存泄漏分析定位

    引用前言 本文开始撰写时我负责的项目需要用php开发一个通过 Socket 与服务端建立长连接后持续实时上报数据的常驻进程程序,在程序业务功能开发联调完毕后实际运行发送大量数据后发现内存增长非常迅速, ...

  5. 查看redis aof内存_Redis持久化问题定位与优化技巧

    今天主要分享继Redis持久化方式RDB.AOF之后的一些常用的Redis问题定位于优化方式.这里主要CPU.内存.磁盘在三个维度去分析问题! Fork操作 当Redis做RDB或AOF重写时,一个必 ...

  6. 性能之巅:定位和优化程序CPU、内存、IO瓶颈

    摘要:性能优化指在不影响系统运行正确性的前提下,使之运行得更快,完成特定功能所需的时间更短,或拥有更强大的服务能力. #一.思维导图 #二.什么是性能优化? 性能优化指在不影响系统运行正确性的前提下, ...

  7. 7 php 内存泄漏_PHP内存泄漏分析定位

    说明:本文来自作者  邹毅 在 GitChat 上分享「  PHP 内存泄漏分析定位」 目录 场景一 程序操作数据过大 场景二 程序操作大数据时产生拷贝 场景三 配置不合理系统资源耗尽 场景四 无用的 ...

  8. 内存泄漏,内存黑洞问题定位

    内存泄漏,内存黑洞问题定位 1. free查看内存概况 [root@VM_0_17_centos ~]# freetotal used free shared buff/cache available ...

  9. Go程序内存泄露问题快速定位

    前几天有同学反馈了 cgo 内存泄露问题,自己也针对这个问题探索了一番,算是为以后解决类似问题提前攒点经验吧.也趁机整理了一下 go 开发过程中内存泄露问题的一些常用排查方法,也希望对新接触 go 的 ...

最新文章

  1. ios xib 四等分_ios Xib的几种用法[转]
  2. 李开复预测:未来20年 AI将深刻影响五大产业
  3. 更改Windows Server Core 2008计算机名字和配置网络连接
  4. python word 1_Python word | 学步园
  5. 第八课-第二讲 08_02_bash脚本编程之七 case语句及脚本选项进阶
  6. [POJ2888] Magic Bracelet
  7. SQL开发中容易忽视的一些小地方( 三)
  8. Google开发者模式调试css样式的方法
  9. C语言 字符串大小写转换
  10. android ResideMenu使用
  11. 最新2016年春运抢票12306买下铺攻略
  12. Activity流程框架
  13. 解析java源文件_使用JDT.AST解析java源码
  14. 基于C#实现的《勇士返乡》游戏设计
  15. 阿里云推出区域经济大脑 | 苹果发布机器学习框架Turi Create | 工业超市震坤行完成2亿元B+轮融资
  16. [JavaSE] 认识String类(StringBuffer和StringBuilder)
  17. 王道书P41 T22(单链表实现)
  18. 钱多多软件制作第七天
  19. linux磁盘空间超载,Linux命令:top
  20. 红外报警c语言,基于51单片机的人体红外报警器程序设计

热门文章

  1. 学英语《每日一歌》之take me to your heart
  2. python 初学者 笔记一
  3. Groovy on Grails(Java笨狗)系列---前言(二)
  4. 微信小程序学习笔记(一)
  5. GE可能会出售其工业软件业务的股份
  6. Linux 电脑系统基本操作
  7. ThinkPHP最新版支付宝接口开…
  8. 相干布居囚禁(CPT)原子钟的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  9. 测试打字速度测试程序c语言,打字速度测试软件
  10. STM32 CUBEIDE MacOS首次使用笔记