运行中进程的内存泄露

原创 2017年05月21日 21:56:15
pmap <pid>
pmap -d <pid>

其中的10240是线程的堆栈,

pmap <pid>|grep 10240|wc 

应该和线程数一致,如果不一致,可能是有线程异常退出、或有线程退出时没有释放资源,或者有线程没启动。


找到可疑的内存块后,可以用gdb -p挂上进程,然后x/40a 0xaddr查看对应内存的数据

[root@localhost security]# pmap -d 4993
4993: -bash
Address Kbytes Mode Offset Device Mapping
08047000 596 r-x-- 0000000000000000 003:00006 bash bash的代码段
080dc000 28 rwx-- 0000000000094000 003:00006 bash bash的数据段
080e3000 280 rwx-- 00000000080e3000 000:00000 [ anon ] bash的堆
4d575000 84 r-x-- 0000000000000000 003:00006 ld-2.3.4.so 共享库的代码段
4d58a000 4 r-x-- 0000000000015000 003:00006 ld-2.3.4.so 共享库的数据段
4d58b000 4 rwx-- 0000000000016000 003:00006 ld-2.3.4.so 共享库的堆
4d58e000 1164 r-x-- 0000000000000000 003:00006 libc-2.3.4.so
4d6b1000 4 r-x-- 0000000000123000 003:00006 libc-2.3.4.so
4d6b2000 12 rwx-- 0000000000124000 003:00006 libc-2.3.4.so
4d6b5000 8 rwx-- 000000004d6b5000 000:00000 [ anon ] 匿名物理内存,
4d6de000 8 r-x-- 0000000000000000 003:00006 libdl-2.3.4.so
4d6e0000 8 rwx-- 0000000000001000 003:00006 libdl-2.3.4.so
4d807000 12 r-x-- 0000000000000000 003:00006 libtermcap.so.2.0.8
4d80a000 4 rwx-- 0000000000002000 003:00006 libtermcap.so.2.0.8
b7bc2000 176 r-x-- 0000000000000000 003:00006 GB18030.so
b7bee000 8 rwx-- 000000000002b000 003:00006 GB18030.so
b7bf0000 24 r-xs- 0000000000000000 003:00006 gconv-modules.cache
b7bf6000 1060 r-x-- 0000000002197000 003:00006 locale-archive
b7cff000 2048 r-x-- 0000000000000000 003:00006 locale-archive
b7eff000 36 r-x-- 0000000000000000 003:00006 libnss_files-2.3.4.so
b7f08000 8 rwx-- 0000000000008000 003:00006 libnss_files-2.3.4.so
b7f0a000 8 rwx-- 00000000b7f0a000 000:00000 [ anon ]
b7f20000 8 rwx-- 00000000b7f20000 000:00000 [ anon ]
bff0d000 84 rw--- 00000000bff0d000 000:00000 [ stack ]

ffffe000 4 ----- 0000000000000000 000:00000 [ anon ]

mapped: 5680K writeable/private: 460K shared: 24K


每列的含义如下:

参数 解释

Address:00378000-0038d000 进程所占的地址空间
Kbytes 该虚拟段的大小
RSS 设备号(主设备:次设备)
Anon 设备的节点号,0表示没有节点与内存相对应
Locked 是否允许swapped
Mode 权限:r=read, w=write, x=execute, s=shared, p=private(copy on write)
Mapping: bash 对应的映像文件名

利用进程信息追查内存泄漏

内存泄漏是后台服务器程序经常遇见的软件问题,定位内存泄漏的方法有很多,例如valgrind,但需要重启进程。在某些场合下,重启进程后复现相同的内存泄漏比较困难,或时间较漫长。本文探讨一种利用现有已经发...
  • baidu_mtc
  • baidu_mtc
  • 2016-01-12 15:38:11
  • 2466

内存泄露与分析

原文链接:http://www.jianshu.com/p/402225fce4b2# 为什么要做性能优化? 手机性能越来越好,不用纠结这些细微的性能? Andr...
  • gaiyindexingqiu
  • gaiyindexingqiu
  • 2017-05-02 10:20:12
  • 721

[Windows] 通过任务管理器查看程序是否有内存泄漏

在 Windows 系统下运行程序的Debug版,可以通过任务管理器看出程序是否有内存泄漏。 演示程序的代码: #include #include // #include #define _...
  • iw1210
  • iw1210
  • 2015-05-22 11:04:05
  • 4029

linux进程之内存泄漏分析

目的:总结linux进程内存泄漏导致crash的分析方法及解决过程 背景:简单使用dlna,但对其源码并无了解 关键节点: 1.问题复现 2.寻找突破口 3.分析日志 4....
  • wuruixn
  • wuruixn
  • 2014-09-03 22:47:40
  • 1943

windows下内存泄露分析工具

windows检查程序是否存在内存泄漏方法1: 1.准备工具:windbg 2.准备环境:需要设置windbg符号路径 内存泄露分析demo [cpp] view plain cop...
  • listener51
  • listener51
  • 2016-10-23 11:35:03
  • 2165

Shell脚本编程——用smaps监控进程内存

操作系统的资源总是有限,必要时可进行监视,也有利于调查一些问题。内存监控的工具除了全能的top、ps、vmstat之外,还有几个专用的工具: free /proc/meminfo /proc//...
  • r_luo
  • r_luo
  • 2013-01-12 11:50:03
  • 1182

Android Native进程内存泄露检测

Android Native进程内存泄露检测简介对于Android的native进程, Android源码中的Bionic库提供了一个很棒的API,get_malloc_leak_info用来检测Na...
  • u011280717
  • u011280717
  • 2016-07-04 13:26:28
  • 3259

Android应用程序如何避免内存泄漏以及如何检查泄漏原因

Android 应用程序如何避免内存泄漏以 及如何检查泄漏原因     Android 的应用程序开发使用的 Java 语言。 Java 语言的 GC 机制使得在堆上分 配内...
  • liujianminghero
  • liujianminghero
  • 2014-05-04 00:02:30
  • 854

进程结束后,进程的所有内存都将被释放,包括堆上的内存泄露的内存。

原因是,当进程结束时,GDT、LDT和页目录都被操作系统更改,逻辑内存全部消失,可能物理内存还在但是逻辑内存已经从LDT和GDT删除,页目录表全部销毁,所以内存会被全部收回。一下这段代码,我个人认为可...
  • x50573750
  • x50573750
  • 2011-02-01 16:36:00
  • 4339

Linux 下几款程序内存泄漏检查工具

写这篇博客的原因呢是因为自己在编写基于Nginx磁盘缓存管理程序,目前已经进入测试阶段,关于这个程序的测试分为几个主要步骤:1.内存管理是否正确(因为这个程序本身开辟很多内存空间进行缓存管理,同时这个...
  • youbingchen
  • youbingchen
  • 2016-07-23 10:15:06
  • 9843
收藏助手
不良信息举报
您举报文章:运行中进程的内存泄露
举报原因:
原因补充:

(最多只允许输入30个字)