admin管理员组

文章数量:1530845

2024年5月23日发(作者:)

如何在系统中查找内存泄漏(memory leak)程序?

为什么系统内存足够的大,但当程序运行了一段时间后,系统还会报内存不够用,无

法产生新进程? 当出现此种情况时,我们通常会还疑有内存泄漏。

首先回答什么是内存泄漏。 内存泄漏是一种程序错误,有内存泄漏的程序会不断向系

统申请内存,然后使用所申请的内存,当不再使用这些内存时也不释放它们,其占用的内

存量越来越大。如果有内存泄漏的程序是一个长时间运行的应用程序,如交互式应用程序,

这就会给系统带来非常严重的问题。 因为长时间的如此运行会导致内存的碎片,会在系统

的实内存和换页空间中积聚大量内容无用的页面。

系统会由于一个程序有内存泄漏问题,最终造成服务器内存的匮乏而宕机或挂起。

在AIX中可以使用svmon , ps 命令来监测进程, 通过检查进程的工作段的变化来确

定是否有内存泄漏现象。如果工作段不断在增加,则就是内存泄漏。

系统核心程序的泄漏是由 mbuf 泄漏、设备驱动程序、核心扩展(kernal extension)

或核心自身引起的。

1. 为了确定是否有内存泄漏,使用svmon 命令中的 i 选项,来监测一个进程或一组

进程,看其工作段空间是否在增加。

下面就是一个有内存泄漏的进程的例子,注意其私有工作段(private working

segment) 的 inuse 不断在增加。

注:svmon 命令中各字段的单位是页面个数,不是KB。

#svmon –P 13548 –i 1 3

-------------------------------------------------------------------------------------

------------------

Pid Command Inuse Pin Pgsp Virtual 64-bit Mthrd

LPage

13548 pacman 8535 2178

N

Vsid Esid Type Description

Virtual

0 0 work kernel seg

4375

48412 2 work process private

2375

6c01b d work shared library text

1790

4c413 f work shared library data

11

847 8533 N N

LPage Inuse Pin Pgsp

- 4375 2176 847

- 2357 2 0

- 1790 0 0

- 11 0 0

本文标签: 内存泄漏进程程序工作