SAP 中与内存相关的运行时错误
原文链接:Memory related runtime errors in SAP
在每天以任何形式处理我们的 SAP 系统时,例如监控 , 故障排除 ,执行任何活动,我们会遇到一些运行时错误。很多时候,由于这些运行时错误,我们面临着会话(用户会话)被终止的后果。我们会遇到多种类型的运行时错误。有些可能是由于 RFC 相关错误 ,有些是由于内存配置(配置错误)以及更多其他原因。
在本博客中,我们将重点介绍由于内存相关问题而发生的运行时错误。
要查看 SAP 内存管理的工作原理,请参阅以下链接:
什么是内存管理?有定义吗?
我们可以与内存管理相关联的最基本的定义是:
一个应用程序在一个工作进程中运行,其中 ABAP 程序通常被执行。进程需要内存来执行此操作,内存管理系统将其分配给该进程。为工作进程分配内存类型的顺序取决于工作进程类型(对话框或非对话框)(请参见 SAP 内存类型)以及底层操作系统。
关于内存管理常用术语,请参阅此处的链接:
内存管理基本术语
内存存在多少种类型?
内存类型
内存管理系统将内存分配给工作进程。不同的内存类型是(主要的和最常用的)是:
扩展内存 Extended memory
专用内存(堆内存)Private memory (heap memory)
分配的顺序取决于工作进程的类型和配置。当用户上下文的大小增加时,可以根据需要扩展允许直接访问的用户上下文区域。
提示:在SAP NW 7.4中,“滚动区域”已与扩展内存集成。前一卷存储器的一部分从EM中分配,而前一卷存储器的其他部分从EG中分配(即,在EG区域之外,EG区域的大小由配置文件参数em/global_area_MB调整)。有关详细信息,请参阅SAP 说明 # 2085980.To 了解内存管理如何从 NW 7.x 和 NW 7.4 X 更改,请参阅此 SAP 说明 # 2148571 – 升级到 SAP 内核 7.4x 后扩展内存 (EM) 和扩展全局内存 (EG) 消耗更高的说明
如何监控内控
监控内存管理系统,要获得完整的信息,请查看这里的链接
你应该在运行过程中监控 SAP 系统,检查内存管理是否有必要的资源,在操作系统层面的频繁分页不会降低系统的速度或造成任何瓶颈。
以下选项可以用于监控内存使用情况:
- 事务码
ST02
- 事务码
ST06
,用于监控主机系统中的可用交换空间
CCMS 警报监视器(事务码
RZ20
)用户概要(事务码
SM04
)
- 工作流程概述(事务码
SM50
)
我们在日常工作中遇到的问题/错误呢?
内存运行时错误,我将在这里列出一些常见的内存相关错误以及如何对其进行故障排除。
扩展内存相关错误
在与扩展内存相关的运行时错误的情况下,最常见的错误条目形式如下,这些错误可能意味着程序尝试分配扩展全局内存并且由于短缺而失败。
一些常见的运行时错误是:
LOAD_NO_ROLL
,错误会话ATTACH_ERROR
,TSV_TNEW_BLOCKS_NO_ROLL_MEMORY
,SYSTEM_NO_ROLL
,STACK_STATE_NO_ROLL_MEMORY
,TSV_TABH_POOL_NO_ROLL_MEMORY
,
RESIZE_EM_ALLOC_ERROR
, SPOOL_INTERNAL_ERROR
, HTTP_NO_MEMORY
,ERROR: New session was refused due to memory bottleneck (termination: ABORT_MESSAGE_STATE)
与堆区域相关的错误
首先,我们将看看堆内存(专用内存)的定义:
堆内存是为 SAP 中的工作流程分配的本地内存。堆内存 包含用户上下文,例如,当扩展内存已满时,按需分配和释放。由一个工作进程分配的堆内存不能被任何其他工作进程访问。
如果已达到 abap/heap 限制的值,则在对话步骤结束后重新启动工作进程。如果堆内存消耗超过配额 abap/heap_area_(non)dia ,则此时正在执行的用户上下文将在完成之前被取消。您可以使用此配额来防止单个对话工作进程(用户上下文)填满应用程序服务器的整个堆内存。
这里需要了解的参数很少:
- abap/heap_area_total 1.
限制实例所有工作进程(所有对话和非对话工作进程)的 ABAP 运行时可以分配的堆内存量;
- abap/heaplimit
如果工作进程的 ABAP 运行时分配的内存多于在此参数中指定的内存,则工作进程将激活“自动重新启动”标志。设置此标志后,工作进程将在执行当前任务后重新启动。只要需要堆内存中的数据,工作进程就不会重新启动。这是触发重新启动工作进程的安全机制。需要重新启动,以便可以将工作进程的堆内存释放回操作系统。不建议更改此参数的值,而是使用其默认值。
内存的一个重要部分是 PROC 内存,这被定义为:
处理器存储器 PROC memory:PROC 内存用于未绑定到特定用户上下文(例如临时堆缓冲区)的数据。与 PRIV 内存不同,PROC 内存的分配不会导致为特定用户上下文独占保留进程。
常见问题:由于堆内存耗尽,可能发生的常见问题有:TSV_TNEW_PAGE_ALLOC_FAILED
,PRIV 模式下的工作流程,TSV_TNEW_OCCURS_NO_ROLL_MEMORY
,SYSTEM_NO_ROLL
或 SYSTEM_NO_MEMORY
。
要解决与堆内存耗尽相关的问题,我们需要检查 dev_w*
中的相关工作进程跟踪文件。
常见的条目是:
–> for class Non-dia
SelMemClass: heap quota (NONDIA) exceeded 4294967296 4295043872
–> for class Dia
SelMemClass: heap quota (DIA) exceeded 4294967296 4295043872
根据您需要调整参数的条目:abap/heap_area_dia/abap/heap_area_nondia
。
为了解决这个问题,最方便的注释是:#2180736 – TSV_TNEW_PAGE_ALLOC_FAILED编写了一些有用的 SAP wiki 链接,它们很好地解释了这些概念。链接:
提示:有一个关于内存管理的非常全面的 SAP wiki,请参阅此处的 wiki
- 点赞
- 收藏
- 关注作者
评论(0)