共计 722 个字符,预计需要花费 2 分钟才能阅读完成。
有敌人在技术探讨群里发问:
遇到 SYSTEM_SHM_OPEN_CHANGE_LOCK 的运行时谬误:Open change lock on transactional area in COMMIT:
上图显示,谬误在 SAP ABAP 规范程序 SAPMHTTP
里抛出,这阐明是 ABAP 服务器进行 HTTP 申请解决或者通信时产生的这个谬误。
另一个谬误是 SYSTEM_NO_SHM_MEMORY 谬误,程序试图在 ABAP 服务器的共享内存区域申请大小为 9168
字节的内存,然而因为共享内存区域可用内存有余,导致内存申请失败,因为程序终止。
从待申请的内存大小看,9168 字节还不到 9k 大,这个内存申请的大小是没有问题的,问题出在 ABAP Netweaver 服务器的共享内存曾经简直被耗尽了。
应用事务码 SHMM,咱们能够查看 ABAP Netweaver 服务器共享内存区域的曾经占用的空间,可用空间和曾经调配的内存空间,如下图所示:
ABAP Netweaver 服务器的共享内存是用来做什么的?顾名思义,共享,那么是在哪些实体间共享数据?
答案是在用户会话即 User Session 之间共享数据。
ABAP 服务器里有三种粒度的会话,依照粒度从大到小顺次排序为:User Session,ABAP Session 和 Internal Session,如下图所示:
对于这些会话间的差别和分割,请参看笔者的 ABAP 学习教材第 58 课:
- 58. 通俗易懂的 SAP ABAP 会话治理 (Session Management) 概念解说,蕴含具体的实例
回到这个 ABAP 运行时谬误,须要分割系统管理员(Basis),请其查看事物码 SHMM 里共享内存的调配和耗费状况,如果的确可用共享内存曾经被耗尽了,须要批改零碎参数,以增大可用内存。