abap内存管理及session通信

2021-05-24 浏览
首先得对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以上则是非常普遍的事情。
免费注册