- 论坛徽章:
- 0
|
环境:
====
主机型号:H85(两台双机) CPU:4个 内存:8G
系统:AIX4.3.3 C编译器:C Compliler 3.6.6
问题:
====
我们在该系统上开发了一套结算系统,主要是批量数据的处理,
开发语言为ANSI C,系统运行一段时间(一两天)后内存就被耗尽,
只好重启机器。
大家帮我分析一下,是何原因导致如此状况?
我的测试程序:
=============
#include <stdio.h>;
#include <stdlib.h>;
#include <unistd.h>;
#include <errno.h>;
int main()
{
int size;
char *buf;
pid_t pid;
char cmd1[256];
char cmd2[256];
char cmd3[256];
char cmd4[256];
pid = getpid();
printf("pid=%d\n", pid);
sprintf(cmd1, "date >;>; testmemG.txt" ;
sprintf(cmd2, "svmon -G >;>; testmemG.txt" ;
sprintf(cmd3, "date >;>; testmemP.txt" ;
sprintf(cmd4, "svmon -P %d >;>; testmemP.txt", pid);
system("rm testmemG.txt testmemP.txt" ;
system(cmd1);
system(cmd2);
system(cmd3);
system(cmd4);
sleep(5);
size = 10*1024*1024;
printf("size=%d\n", size);
buf = (char*)malloc(size);
if (buf == NULL)
{
printf("malloc error, err=%s\n", strerror(errno));
exit(1);
}
memset(buf, 0, size);
sleep(5);
system(cmd1);
system(cmd2);
system(cmd3);
system(cmd4);
free(buf);
buf = NULL;
sleep(5);
system(cmd1);
system(cmd2);
system(cmd3);
system(cmd4);
return 0;
}
测试结果:
=========
1. testmemG.txt
Wed Feb 26 16:00:18 CST 2003
size inuse free pin virtual
memory 2097141 433492 1663649 98900 322744
pg space 524288 854
work pers clnt
pin 98706 194 0
in use 414994 18498 0
Wed Feb 26 16:00:28 CST 2003
size inuse free pin virtual
memory 2097141 436056 1661085 98900 325306
pg space 524288 854
work pers clnt
pin 98706 194 0
in use 417557 18499 0
Wed Feb 26 16:00:33 CST 2003
size inuse free pin virtual
memory 2097141 436360 1660781 98901 325577
pg space 524288 854
work pers clnt
pin 98707 194 0
in use 417859 18501 0
2. testmemP.txt
Wed Feb 26 16:00:18 CST 2003
-------------------------------------------------------------------------------
Pid Command Inuse Pin Pgsp Virtual 64-bit Mthrd
29702 testmem 7200 2338 182 4333 N N
Vsid Esid Type Description Inuse Pin Pgsp Virtual Addr Range
0 0 work kernel seg 4091 1529 182 3475 0..21828 :
65474..65535
e001c d work shared library text 3085 808 0 841 0..65535
a8635 f work shared library data 12 0 0 6 0..1499
c0658 2 work process private 11 1 0 11 0..0 :
65313..65535
c8679 1 pers code,/dev/lvapp:3727 1 0 - - 0..0
43
Wed Feb 26 16:00:28 CST 2003
-------------------------------------------------------------------------------
Pid Command Inuse Pin Pgsp Virtual 64-bit Mthrd
29702 testmem 9763 2338 182 6895 N N
Vsid Esid Type Description Inuse Pin Pgsp Virtual Addr Range
0 0 work kernel seg 4091 1529 182 3475 0..21828 :
65474..65535
e001c d work shared library text 3085 808 0 841 0..65535
c0658 2 work process private 2571 1 0 2571 0..2560 :
65313..65535
a8635 f work shared library data 15 0 0 8 0..1499
c8679 1 pers code,/dev/lvapp:3727 1 0 - - 0..0
43
Wed Feb 26 16:00:33 CST 2003
-------------------------------------------------------------------------------
Pid Command Inuse Pin Pgsp Virtual 64-bit Mthrd
29702 testmem 9763 2338 182 6895 N N
Vsid Esid Type Description Inuse Pin Pgsp Virtual Addr Range
0 0 work kernel seg 4091 1529 182 3475 0..21828 :
65474..65535
e001c d work shared library text 3085 808 0 841 0..65535
c0658 2 work process private 2571 1 0 2571 0..2560 :
65313..65535
a8635 f work shared library data 15 0 0 8 0..1499
c8679 1 pers code,/dev/lvapp:3727 1 0 - - 0..0
43
使用malloc分配的内存,在调用free之后,内存并没有被释放,为什么?
百思不知其解,望高人指点,就此谢过! |
|