免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8840 | 回复: 12

[小机硬件] 请教一个AIX 64位程序内存使用情况的怪异现象 [复制链接]

论坛徽章:
0
发表于 2011-08-31 16:28 |显示全部楼层
30可用积分
本帖最后由 toniz 于 2011-08-31 16:31 编辑

下面是两个时间段,用SVMON观察schedserv这个程序内存使用情况。
箭头的地方,为什么17,18这两个堆的空间都没有占满,就使用了19这个堆。

pdump.schedserv.431058.09Jun2011-15.18.46.out                             
----------------------------------------------------------------           
    9e86e  13 work text data BSS heap   s  65536     0    0 65536           
   4a2101  12 work text data BSS heap   s  65536     0    0 65536           
   6e89e8  16 work text data BSS heap   s  65536     0    0 65536           
   5a555a  14 work text data BSS heap   s  65536     0    0 65536           
   29d4a8  15 work text data BSS heap   s  65536     0    0 65536           
    a9078  17 work text data BSS heap   s  38581     0    0 38581 <==      
    dda20  11 work text data BSS heap   s  32751     0    0 32751           
   76758b  18 work text data BSS heap   s    343     0    0   343 <==      
   147867  19 work text data BSS heap   s    112     0    0   112 <==      
-----------------------------------------------------------------         
pdump.schedserv.431058.09Jun2011-15.22.03.out                             
-----------------------------------------------------------------         
    9e86e  13 work text data BSS heap   s  65536     0    0 65536           
   4a2101  12 work text data BSS heap   s  65536     0    0 65536           
   6e89e8  16 work text data BSS heap   s  65536     0    0 65536           
   5a555a  14 work text data BSS heap   s  65536     0    0 65536           
   29d4a8  15 work text data BSS heap   s  65536     0    0 65536           
    a9078  17 work text data BSS heap   s  65536     0    0 65536 <==      
    dda20  11 work text data BSS heap   s  32751     0    0 32751           
   76758b  18 work text data BSS heap   s  65536     0    0 65536 <==      
   147867  19 work text data BSS heap   s  11582     0    0 11582 <==      


这段代码:
char *pch[5000];
for(int i=0;i<5000;++i){
pch=new char[100000];
}
如果用SVMON去观察,会发现内存使用如下:
7ba5        11 work text data BSS heap           s   2696     0    0  2696
f9ef8        12 work text data BSS heap           s   2318     0    0  2318

如果在这段程序下面加上:
for(int i=0;i<5000;++i){
memset(pch,0x00,100000);
}
那么,这程序的内存使用会变成:
7ba5        11 work text data BSS heap           s   65536     0    0  65536
f9ef8        12 work text data BSS heap           s   XXXX     0    0  XXXX

也就是说,AIX的MOLLOC子程序会先计算这个值,定义了,就在堆里面预留了地址页。11的堆已经不会再放下其他数据了。


大牛指点下:
1.我上面的做的分析是否恰当。
2.AIX中是否还存在其它可能导致一个段没用完,就申请另外一个段的现象。
3.Memory corrupted.有没有可能导致上面这个问题。

谢谢~~

论坛徽章:
0
发表于 2011-09-01 13:24 |显示全部楼层
好奇上下文
研究的目的是什么。。。。。

论坛徽章:
0
发表于 2011-09-02 08:27 |显示全部楼层
期待有人来解决

论坛徽章:
0
发表于 2011-09-05 09:50 |显示全部楼层
回复 2# emperor


    因为目前这个程序运行一段时间后内存就越来越大。两天可达4G。但按照正常逻辑是不可能 会占用这么大内存的。

    目前想辨别是什么原因导致的。

    如果是内存泄露,那么应该是一个段用完再用另外一个段。

    所以想了解下还有没有什么其它可能导致这种内存现象。

论坛徽章:
0
发表于 2011-09-05 10:43 |显示全部楼层
回复 4# toniz


    有现成的,就不解释了,自己看吧

http://publib.boulder.ibm.com/in ... n%2Faix_memory.html

。。。。。。

论坛徽章:
1
操作系统版块每日发帖之星
日期:2016-02-18 06:20:00
发表于 2011-09-05 10:59 |显示全部楼层
不是泄漏,是没有回收……新开一个栈肯定不会接着以前的用了,你看看你的线程有没有真的结束

我怀疑你的服务中守护进程对于各线程的处理有问题,线程数据没有终止而是被保留了。

论坛徽章:
0
发表于 2011-09-05 11:03 |显示全部楼层
回复 5# emperor


    好的  谢谢  我去看看

论坛徽章:
0
发表于 2011-09-05 11:25 |显示全部楼层
回复 5# emperor


    不好意思   是我没说明清楚   

我们的程序是C++程序,不是JAVA程序。

我看了哥们给的文档,虽然里面讲的是JVM。但也仔细看了下,没发现有什么可以解释这个内存使用情况的额。

还是谢谢你了。。。

论坛徽章:
0
发表于 2011-09-05 11:33 |显示全部楼层
回复 6# spook


    spook 你好呀。。。

    是有守护进程,也有线程。5个线程一直从程序开始开到程序结束的。中间不会结束线程。

    我也用多线程和容器写了一个程序观察内存使用情况,发现也是一个段用完了再申请新的段使用,不会一个段还剩那么多地址页,就申请另外一个段。。

论坛徽章:
1
操作系统版块每日发帖之星
日期:2016-02-18 06:20:00
发表于 2011-09-05 13:22 |显示全部楼层
本帖最后由 spook 于 2011-09-05 13:27 编辑

http://publib.boulder.ibm.com/in ... Frtref%2Fmemset.htm

开始没注意,看这个,

memset 的 直接给内存赋值的,呃,用的不是java
看下用法
#include <string.h>
void *memset(void *dest, int c, size_t count);

看说明
Description
The memset() function sets the first count bytes of dest to the value c. The value of c is converted to an unsigned character.


那肯定是按照 100000先分了……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP