Chinaunix首页 | 论坛 | 博客
  • 博客访问: 371235
  • 博文数量: 68
  • 博客积分: 1435
  • 博客等级: 上尉
  • 技术积分: 690
  • 用 户 组: 普通用户
  • 注册时间: 2010-02-06 22:35
文章分类

全部博文(68)

文章存档

2013年(1)

2012年(1)

2011年(4)

2010年(62)

我的朋友

分类: WINDOWS

2010-09-05 15:35:23

首先得对ABAP Application Server的架构有个初步的认识。一个ABAP System中会有多个Application Server,用户登录ABAP System的时候会被一个Message Server dispatch到其中一个Application Server上,该Application Server会为这个用户生成一个user session。当用户每打开一个新的SAPGUI窗口的时候又会生成一个新的external session(RFC调用STARTING NEW TASK也可以生成一个external session),一个user session里面最多只能有6个external session,也就是说一个用户登录后最多只能打开6个SAPGUI窗口。在一个SAPGUI窗口内部调用ABAP程序的时候,则又会生成 internal session。

对于上面这几个session之间的关系可以这么简单概括:user session > external session > internal session。不过这些概念只对传统ABAP编程有效,如果在Web Dynpro的背景下则不是这样,用户每在一个浏览器tab里打开一个Web Dynpro Application,ABAP Application Server都会生成一个新的user session,所以说对于Web Dynpro而言external session和internal session可以忽略。

好,可以说说ABAP内存管理的问题了。

一个external session之中的internal session之间可以用ABAP memory进行通信,具体查阅EXPORT/IMPORT关键字。

一个user session之中的external session之间可以用SAP memory进行通信,具体查阅SET/GET关键字。

同一个ABAP Application Server中的user session之间可以用Shared Memory进行通信。现在一般会用ABAP OO里面的shared objects来读写这中memory。

跨Application Server的session之间的通信则需要借助DB来进行。

ABAP程序基本都是有状态的,以上所说的这些session都长时间驻留在内存中,所以ABAP服务器内存消耗量都很大,有时候一个user session就有几百M的内存占用,10M以上则是非常普遍的事情。
阅读(2547) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~