免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2143 | 回复: 8
打印 上一主题 下一主题

求助,关于程序运行数据区的问题。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-10-28 21:15 |只看该作者 |倒序浏览
现在有一个按照网点提交的批量程序PGMA 里面 call 一个程序PGMB 。PGMB 程序里面没有SETON   LR。我想知道这样的话等这个批量程序运行结束了PGMB的变量什么的不会清除出内存,如果是这样的话,那么这样岂不是会占用很多内存空间。这样的话如果有1000个网点那就是有1000个作业都会调用PGMB,是不是要占用1000倍的一个PGMB所需要的内存资源?

哪位大侠能给扫盲一下,程序运行内存分配原理。多谢。

论坛徽章:
0
2 [报告]
发表于 2012-10-28 21:15 |只看该作者
自己先顶一下,最近论坛太清静了。

论坛徽章:
0
3 [报告]
发表于 2012-10-29 22:42 |只看该作者
本帖最后由 passthru 于 2012-10-29 22:47 编辑

假设pgma都是并发提交的,即pgma使用的ag都是new ag,或detag,而pgmb采用的默认的上级程序pgma的*caller ag。当程序pgma结束时,pgmb的ag资源随之释放。

如果是命名的ag,即pgma与pgmb的资源都是在命名的ag管辖之下,程序pgma结束时,因为没有setlr on,pgmb的ag资源还一直存在,但是,因为pgma或pgmb不是可重入性的,所以pgmb占用的ag资源是垃圾,os会自动回收。

一般os有驻留内存管理机制,如果驻留的资源,程序或数据,超过驻留的时间,os会把这些资源逐级降序,从内存到高速缓存,在到磁盘,直到os清理,或成为占用ASP资源的垃圾。

批处理是一项综合技术,对1000个pgma并发提交,关系到锁表和超时处理。

论坛徽章:
0
4 [报告]
发表于 2012-10-30 20:03 |只看该作者
本帖最后由 xjromance 于 2012-10-30 20:04 编辑

非常感谢您这么晚的回答!PGMA和PGMB编译的时候都是*CALLER的AG。程序PGMB没有seton  lr   程序PGMA有seton  lr 这样PGMB占用的资源在什么时候释放?回复 3# passthru


   

论坛徽章:
0
5 [报告]
发表于 2012-10-31 09:31 |只看该作者
本帖最后由 passthru 于 2012-10-31 11:59 编辑
xjromance 发表于 2012-10-30 20:03
非常感谢您这么晚的回答!PGMA和PGMB编译的时候都是*CALLER的AG。程序PGMB没有seton  lr   程序PGMA有seton ...


一般情况下,程序都是采用默认的dftag。一旦PGMA或PGMB运行结束,PGMA上一级程序因为采用dftag,所以,从上一级程序到PGMA,PGMB的AG资源都释放,OS回收释放的资源。

论坛徽章:
0
6 [报告]
发表于 2012-10-31 18:46 |只看该作者
多谢。回复 5# passthru


   

论坛徽章:
0
7 [报告]
发表于 2012-11-02 14:13 |只看该作者
如果楼主的批处理子系统限定的并发job数大于等于1000,并且1000个job同时被提交的话,那么会有楼主所说的情况,并且不仅仅是1000个PGMB占用的工作内存,还包括1000个PGMA所占用的工作内存。
PGMA和PGMB的工作内存何时被释放?               
因为PGMA和PGMB的活动组属性是*caller,那么就需要看PGMA的上级的活动组属性才能确定。
1如果活动组属性是*new,那么上级程序结束(无论是否seton lr),就会连带PGMA+PGM的工作内存一括释放。
2如果活动组属性是命名活动组,那么①:RCLACTGRP(该命名活动组)(同一个JOB中其他活动组中的程序发起),会连带PGMA的上级程序+PGMA+PGMB的工作内存一括释放②:JOB结束,JOB关联的所有工作内存会被释放(无论JOB中是否有程序没有SETON LR,无论JOB所持资源都被分配在什么活动组中),还有JOB结束对任何活动组都是一样的道理。
3如果活动组属性是默认活动组,那么内存的回收只有等该JOB结束了。(因为PGMA和PGMB都运行在*CALLER活动组中,那么他们一定是ILE程序,所以无论他们结束前是否SETON LR,他们都不会释放各自的工作内存)
4如果运行在*caller活动组中,那么继续看他的上级程序。
seton lr到底什么意思?
seton lr只是将程序所持的资源清理出程序的工作内存。程序如果没有seton lr,再次被调用时不进行资源的初始化,而是接着前一次的工作状态继续工作。       
对于ile(活动组属性不是默认活动组)程序,无论程序是否seton lr结束,都不会影响其工作内存的分配                       
对于opm(活动组属性是默认活动组)程序,没有seton lr,表示不释放程序使用的资源,那么资源占用的空间当然也不释放,也就是说会保留程序的工作内存。
seton lr和rclrsc是用来回收程序基于工作内存之上的资源,活动组是用来控制内存的分配与回收。
楼主想知道的是ile程序的内存占用的问题,不要考虑seton lr。

论坛徽章:
0
8 [报告]
发表于 2012-11-02 20:21 |只看该作者
pgma是被别的程序提交的别的程序也是*CALLER,这样的话这作业所占的内存资源在什么时候释放呢?回复 7# qiao_zq


   

论坛徽章:
0
9 [报告]
发表于 2012-11-03 13:33 |只看该作者
*LR=*ON时释放
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP