关于 SAP ABAP SYSTEM_SHM_OPEN_CHANGE_LOCK 运行时错误的问题

有朋友在技术讨论群里提问:

关于 SAP ABAP SYSTEM_SHM_OPEN_CHANGE_LOCK 运行时错误的问题_第1张图片

遇到 SYSTEM_SHM_OPEN_CHANGE_LOCK 的运行时错误:Open change lock on transactional area in COMMIT:

关于 SAP ABAP SYSTEM_SHM_OPEN_CHANGE_LOCK 运行时错误的问题_第2张图片

上图显示,错误在 SAP ABAP 标准程序 SAPMHTTP 里抛出,这说明是 ABAP 服务器进行 HTTP 请求处理或者通信时发生的这个错误。

关于 SAP ABAP SYSTEM_SHM_OPEN_CHANGE_LOCK 运行时错误的问题_第3张图片

另一个错误是 SYSTEM_NO_SHM_MEMORY 错误,程序试图在 ABAP 服务器的共享内存区域申请大小为 9168 字节的内存,但是因为共享内存区域可用内存不足,导致内存申请失败,因为程序终止。

从待申请的内存大小看,9168 字节还不到 9k 大,这个内存请求的大小是没有问题的,问题出在 ABAP Netweaver 服务器的共享内存已经几乎被耗尽了。

使用事务码 SHMM,我们可以查看 ABAP Netweaver 服务器共享内存区域的已经占用的空间,可用空间和已经分配的内存空间,如下图所示:

关于 SAP ABAP SYSTEM_SHM_OPEN_CHANGE_LOCK 运行时错误的问题_第4张图片

ABAP Netweaver 服务器的共享内存是用来做什么的?顾名思义,共享,那么是在哪些实体间共享数据?

答案是在用户会话即 User Session 之间共享数据。

ABAP 服务器里有三种粒度的会话,按照粒度从大到小依次排序为:User Session,ABAP Session 和 Internal Session,如下图所示:

关于 SAP ABAP SYSTEM_SHM_OPEN_CHANGE_LOCK 运行时错误的问题_第5张图片

关于这些会话间的差异和联系,请参看笔者的 ABAP 学习教材第 58 课:

回到这个 ABAP 运行时错误,需要联系系统管理员(Basis),请其查看事物码 SHMM 里共享内存的分配和消耗情况,如果确实可用共享内存已经被耗尽了,需要修改系统参数,以增大可用内存。

你可能感兴趣的:(关于 SAP ABAP SYSTEM_SHM_OPEN_CHANGE_LOCK 运行时错误的问题)