AIX 5.3上内存释放

lionpb 2007-12-03 09:07:02
在RS6000/AIX5.3上,发现用malloc/calloc/realloc分配的空间,调用free释放后,使用ps -elf依然看到该进程的SZ跟没释放一样大。
我印象中,在AIX 4上面,没有这个问题,分配空间,释放后,使用ps -elf可以看到其SZ恢复。但在5.3上,在未分配前SZ是413,分配后为15844,释放后还是15844。不过下一次分配不增长,依然是15844。同样的现象在HP-9000上也碰到过,但是据HP的技术人员说,他们的策略是当PageSpace使用到一定程度后,系统才统一来回收。在AIX 5.3上,可以看到PageSpace在不断增长,据运行管理人员说,到100%后就宕机。
不过在AIX 5.3和HP-9000上都一样的就是进程退出后,PageSpace的使用比率会下降。
想请教有没有什么办法,在进程不退出的情况下,系统可以回收释放了的内存?比如说设置某个系统参数,或者这种情况是由于某种故障引起的?

请高手指点一下,比较着急。
...全文
1015 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lazycat007 2008-03-17
  • 打赏
  • 举报
回复
程序的排版都没有了,大家凑合看吧
lazycat007 2008-03-17
  • 打赏
  • 举报
回复
如果是这样,岂不是虚存管理上有严重问题?明明有空闲的空间,却不能使用?

我编了一个小小的程序,就只是分配空间,然后释放,这个程序最后会导致无法分配到空间。

#include <stdio.h>

void main()
{
printf("Program start!\n");
char* p_char;
while(1)
{
if ((p_char = (char *)calloc(1024,sizeof(char)))!= NULL)
{
printf("%08x\n",p_char);
free(p_char);
printf("memory free!\n");
}
else
{
printf("memory allocate error, program quit!\n");
break;
}

// sleep(1);
}
}

程序上应该没有什么漏洞吧,希望能得到高手指点。
lionpb 2008-02-22
  • 打赏
  • 举报
回复
这个问题的缘由,是因为IBM新的虚存管理策略中,也是采用申请后不再真正释放的方法。也就是当你使用了PageSpace之后,即便调用free进行释放,系统也仅仅是在该页面打个标记,但该页面还是保留在进程的堆中,不能被其他进程使用,除非进程退出。
曾经跟IBM工程师商议能够提供另外一套内存管理函数库,以解决这个问题(个别会占用大量内存/虚存的程序使用这套函数库),但至今尚未得到研究答复。

因此我现在采用的策略是:定期重启该进程或当内存使用量大到一定程度后重启该进程。

不过大家不用担心,这种其实不是内存泄漏,因为一旦分配过大的内存并释放以后,以后申请小片内存,进程占用的内存和虚存一般不会增长。唯一担心的是当很多进程都占用了大量的虚存页面后,发生虚存不足(使用率超过80%为警戒线),有可能引起宕机。

这个问题就这样结束了。不再继续等待回复。看来我的帖子虽然都是100分,但是很少有高手关注,往往是自行解决。
hahe7788 2008-01-10
  • 打赏
  • 举报
回复
关注
cartersyc 2008-01-08
  • 打赏
  • 举报
回复
mark,也遇到同样问题
trueadou 2007-12-25
  • 打赏
  • 举报
回复
关注
AIX常用命令://查看机器序列号,IBM的基本信息都可以通过该命令查询得到 #prtconf #oslevel -r == uname -a //操作系统版本 #oslevel //查看操作系统版本ex :5.1.0.0 #oslevel -r //ex:5100-04 == oslevel -q //双机软件版本号 # lslpp -l|grep cluster //显示graphic display # lsdisp //查看CPU的个数 # bindprocessor -q //查看CPU的主频,操作系统版本最低是AIX 5.1,包含在软件包bos.pmapi.pmsvcs pmcycles This machine runs at 1500MHz //显示cpu的主频是1.5G #如何查找根文件系统(/)中的大文件 find -xdev -size +xxxx -ls #查找根卷组下大于2M的文件, 并根据文件大小排序, 大文件在前. find / -xdev -size +1024 -ls |sort -r +6 8277 624 -r-xr-xr-x 1 root system 635390 Jul 31 2003 /sbin/helpers/jfs2/fsck 28 596 -rw-r--r-- 1 root system 609388 Apr 12 17:25 /smit.log 30 1660 -rw-r--r-- 1 root system 3338083 Apr 5 14:08 /core #查看备份磁带中备份文件的大小 tcopy /dev/rmt0 tcopy: Tape File: 1; Records: 1 to 251; Size: 2097152. ---磁带机文件头大小 tcopy: Tape File: 1; Record: 252; Size 344064. ---磁带机文件头大小 tcopy: File: 1; End of File after: 252 Records, 526729216 Bytes. ---文件大小 tcopy: The end of the tape is reached. tcopy: The total tape length is 526729216 bytes. #如何取定文件与文件集的对应关系,有时想使用某个安装文件, 但没有安装包含该文件的文件集,找到文件集来安装所需文件 首先确认系统中已经安装了“bos.content_list”文件集(fileset), 如果没有安装, 请使用smitty installp进行安装. 运行which_fileset命令, 根据文件查找对应的文件集. 例如: #which_fileset iostat /usr/bin/iostat bos.acct 5.1.0.0 运行lslpp -f 命令, 查看指定文件集中包含的文件: #lslpp -f bos.acct //出于AIX系统安全考虑, 需要使某些用户只能在控制台登录使用,而不允许远程登陆使用. 更改/etc/security/user 文件中需要限制的用户的rlogin属性(rlogin = false) 当再次尝试远程登录时, 系统报错:Remote logins are not allowed for this account, 表示修改成功 //如何自动logout用户 有的用户登录后就长时间空闲,有可能导致安全上的问题,通过打开 /etc/profile 中 TMOUT 注释,将在设置的时间到达后自动logout用户 例如: export TMOUT=120 那么, 用户两分钟没有击键,将自动logout //AIX系统中如何限制用户所使用文件的大小(AIX小型机有大文件限制) >#smit chuser 在菜单上选择要控制的用户, 并修改下面两项: Soft FILE size [aaa] Hard FILE size [aaa] 则修改后用户的文件大小最大为aaa×512 bytes. >如何验证? 可以用该用户登录系统, 使用命令“ulimit -f”和“ulimit -Hf”可分别显示其fsize,fsize_hard的大

206

社区成员

发帖
与我相关
我的任务
社区描述
IBM 开发者
社区管理员
  • IBM开发者社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧