运行中进程的内存泄露

原创 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 对应的映像文件名

Linux 列出所有正在运行的进程

ps命令 输入下面的ps命令,显示所有运行中的进程: # ps aux | less 其中, -A:显示所有进程 a:显示终端中包括其它用户的所有进程 x:显示无控制终端的进程 ...
  • mengyafei43
  • mengyafei43
  • 2014年05月22日 17:47
  • 5579

进程管理实验

操作系统进程管理实验 用C语言编程模拟进程管理,至少要有:创建新的进程;查看运行进程;换出某个进程;杀死运行进程以及进程之间通信等功能...
  • ryan_jianjian
  • ryan_jianjian
  • 2016年10月10日 19:35
  • 663

如何在Linux中查看所有正在运行的进程

你可以使用ps命令。它能显示当前运行中进程的相关信息,包括进程的PID。Linux和UNIX都支持ps命令,显示所有运行中进程的相关信息。ps命令能提供一份当前进程的快照。如果你想状态可以自动刷新,可...
  • u011743396
  • u011743396
  • 2016年04月29日 18:01
  • 2267

Android开发——查询/杀死手机里正在运行的进程

0. 前言 以前有同学好像做过一个叫“自习君”的App,开启后自动检测用户这一天的自习时间,在学校里宣传广告还打了不少。其实实现原理非常简单,在SQlite数据库(也可以通过文件)先预置众多应用的Pa...
  • SEU_Calvin
  • SEU_Calvin
  • 2016年07月17日 08:43
  • 11965

Android获取运行进程解决方案分析

在Android中获取运行进程这种需求在许多场合需要被使用到,但实际情况是在Android Lollipop即5.0后,Google开始收紧对底层权限控制。 下面就涉及的方法及我现在找到的解决方案来...
  • snowgeneral
  • snowgeneral
  • 2017年06月28日 00:51
  • 429

进程及其进程环境

6.1.1  基本概念 程序是保存在磁盘上的可执行代码和数据的映像. 进程是正在运行的程序. 一个程序可以同时有多个进程实例, 它们互相没有关系. 6.1.2  main 函数 main...
  • jnwangcan
  • jnwangcan
  • 2013年03月03日 15:11
  • 878

python查看进程是否运行

啥也不说了,直接上代码:#要先打开web服务器才能发推送消息 #os.system("twistd -r kqueue web --class=pyapns.server.APNSServer --p...
  • fengmm521
  • fengmm521
  • 2017年11月03日 18:57
  • 723

Linux进程运行状态图

进程是一个动态的实体,所以他是有生命的。从创建到消亡,是一个进程的整个生命周期。在这个周期中,进程可能会经历各种不同的状态。一般来说,所有进程都要经历以下的3个状态: 就绪态。指进程已经获得所有...
  • liaoshengshi
  • liaoshengshi
  • 2015年07月11日 18:02
  • 1077

Qt运行一个实例进程

在开发项目的工程中,我们经常希望只运行一个相同的Qt实例进程。当然也可以像类似QQ那样,同时登录多个不同的账号!为了避免这个问题,介绍以下几种用法,每一个解决方案都适用于特定的情况,所以必须尝试和适用...
  • yangxiao_0203
  • yangxiao_0203
  • 2013年09月09日 21:19
  • 4052

让进程在后台可靠运行的几种方法

我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败。如何让命令提交后不受本地关闭终端窗口/网络断开...
  • ichsonx
  • ichsonx
  • 2014年12月18日 16:44
  • 3556
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:运行中进程的内存泄露
举报原因:
原因补充:

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