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