ABAP 内存管理 短转储问题 dump ‘ TSV_TNEW_PAGE_ALLOC_FAILED ‘ SAP
文章目录
一、TSV_TNEW_PAGE_ALLOC_FAILED 的错误原因
首先这不是软件中的错误或错误,而与自定义SAP应用程序服务器上的资源有关。
然后就要分析两种情况,可以进入ST22详细查看参数。
在以下情况之一中会引发这种短时转储:
1.第一种情况
单个工作流程尝试分配的内存超出了允许的内存数量(单独)。系统保护机制。当前系统负载无关紧要。
所需的分析从ST22事务开始,
在该事务中可以检查转储的更多信息。在ST22中,
选择所需的TSV_TNEW_PAGE_ALLOC_FAILED,
然后滚动到“内存消耗(Memory consumption)”区域。此区域报告转储时的内存使用情况。下面是此类信息的一个示例(请注意,在“ EM”和“ Heap”字段中添加了点):
内存消耗(Memory consumption)
Roll… 0
EM… 2.000.000.000
Heap… 2.000.000.000
Page… 16384
MM used. 1157760496
MM free. 2294495840
根据上面的参数,具体来说,有关此事件的shordump信息告诉我们该进程已使用2 GB的扩展内存(EM)加2 GB的堆内存(Heap)。然后我们得出结论,在转储时,该进程正在使用多于4 GB的内存,由于无法提供更多的内存,该内存失败了。
考虑到以下信息,我们必须检查与刚才看到的值相关的当前内存参数是什么。一种方法是通过事务ST02。在ST02中,您可以在“扩展内存(Extended memory)”字段中单击两次,
然后在“当前参数(Current parameters)”上单击两次。在该屏幕上,我们需要知道以下参数:
内存设置
**
em / initial_size_MB … 12.000
ztta / roll_extension … 2.000.000.000
abap / heap_area_dia … 2.000.000.000
abap/ heap_area_nondia 2.000.000.000
abap / heap_area_total。4.000.000.000** (总计)
通过查看这些参数的值,我们可以得出结论,引发shortdump的过程,可以为扩展内存“ ztta / roll_extension”成功分配全部已分配的内存配额,并为HEAP内存分配已分配的配额,这可以分为以下两个参数之一: abap / heap_area_dia”表示对话过程,或“ abap / heap_area_nondia”表示非对话过程。
abap / heap_area_dia 和 abap/ heap_area_nondia 不能超过 abap / heap_area_total
如果该工作流程可以为扩展内存(EM)和堆区域(heap)分配单个流程的所有可用内存,但仍失败了,我们可以得出结论,这种情况是第一种情况。
2.第二种情况
系统繁忙,并且有很多进程在请求内存。在这种情况下,当前的内存使用率很高。一旦下一个工作流程请求的数量超过了全局内存总数的阈值,我们就会发生shortdump。
让我们假设发生了相同的short dump,就像前面的示例一样,我们将进行分析。这是我们在ST22看到的:
内存消耗(Memory consumption)
Roll… 0
EM… 1.000.000.000
Heap… 0
Page… 16384
MM used. 1157760496
MM free. 2294495840
现在,我们有一个稍微不同的地方。我们已经知道该进程最多可以使用2 GB的扩展内存,但是在仅使用1 GB后仍然转储。唯一的解释是,整个应用服务器没有其他1GB可用空间。
为了确认/排除该假设,我们再次将分析移至ST02分析。我们的重点再次放在SAP MEMORY选项卡上。现在我们看一下“扩展内存(Extended memory)”字段,只需将两个字段“ MaxUse”和“ In Mem”关联起来,就可以确认在当前正常运行时间中至少使用了一次所有扩展内存。假定是我们的转储负责,实例的当前扩展内存大约为11GB(可用的12 GB),并且我们的程序仅分配了尚未使用的1GB。
SAP 内存 使用百分比 最大使用量 记忆中
SAP MEMORY CURR.USE% CURUSE[KB] MAXUSE[KB] IN MEM[KB]
Heap memory 0 100.509 0
Page area 0,12 308 11.512 131.072
Extended memory 14,69 1.679.360 12.000.000 12.000.000
这很好的解释了第二种情况。
二、操作系统细节,分配内存参数
1.每个平台的扩展内存EM的配额定义为:
来自SAP 官方指导文档
1.AIX(ES / TABLE = SHM_SEGS)
ztta / roll_extension: 在上面的摘录中定义扩展内存(EM)的配额。如果EM的转储中显示的值比此参数低得多,通常是因为已达到可以由应用程序服务器的所有会话分配的EM总量。这可以在事务ST02中确认。有关其他AIX内存参数,请参阅 SAP注释789477。
2.Linux / Windows(es /实现= map)
ztta / roll_extension;
em / address_space_MB:此参数以MB为单位指定在工作过程中为内存类“扩展内存”提供的地址空间的大小。因此,应将其设置为高于ztta / roll_extension。
有关在具有MAP实现的Linux上进行内存管理的其他信息,请参阅SAP Note 386605。
有关Windows上的内存管理的其他信息,请参见SAP注释88416。
3.其他UNIX平台(ES / TABLE = UNIX_STD实现)
ztta / roll_extension: 请参阅案例“ a”。
有关Linux 64位(ES / TABLE = UNIX_STD)上的内存管理的其他信息,请参阅SAP注释941735。
4.堆内存的配额由以下参数设置:
abap / heap_area_dia 对话框工作进程的堆内存配额(HEAP)。
abap / heap_area_nondia 非对话工作流程的堆内存配额(HEAP)
abap / heap_area_total 所有工作进程可总共分配的堆内存配额
在所有操作系统上(即,堆参数与操作系统无关)。
abap / heap_area_dia:对话工作进程的堆内存配额(HEAP)。
abap / heap_area_nondia:非对话工作进程的堆内存配额(HEAP)。
abap / heap_area_total:所有工作进程可总共分配的堆内存配额。
可以通过运行RSMEMORY程序临时(动态)增加内存配额,而无需重新启动系统。有关详细信息,请参阅rsmemory report。如果该系统是生产系统,那么这可能是已知程序消耗内存配额的最佳方法。
<font color=#999AAA 、
2.可用的扩展内存总数由以下参数设置
a ) AIX(ES / TABLE = SHM_SEGS)
EM / TOTAL_SIZE_MB:此参数限制了应用程序服务器的所有会话可以分配的扩展内存的总数。
b)Linux( es / implementation = map )和Windows:
em / max_size_MB:此参数限制了应用程序服务器的所有会话可以分配的扩展内存的总数。
c)其他UNIX平台(UNIX_STD实现):
em / initial_size_MB:此参数限制了应用程序服务器的所有会话可以分配的扩展内存的总数。
从内核7.40开始,零管理内存管理的可用性适用于所有平台
3.如何通过RSMEMORY临时修改内存设置
总结
在以上描述的任何情况下,如果确认内存机制按设计工作,则应由应用程序团队(SAP或客户的)来分析异常内存消耗。在大多数情况下,无需深入了解关联应用程序的需求就可以将内存配额提高到某个阈值,但这完全是系统管理员的要求,让BASIS直接把内存调大。如果受影响的程序确实是自定义的,并且参数已经过调整(这意味着将不再保留更多的内存),则开发应用程序的客户团队应执行此分析,要进行性能优化和分析。
则1.通过SM51 / SM50检查此作业的内存利用率。2。要求职能团队划分数据并运行此工作。3.如果无法划分数据,则根据内存利用率,通过RSMEMORY报告增加堆内存。
最后附上IBM 的文档
SAP代理和TSV_TNEW_PAGE_ALLOC_FAILED转储
文章来自于网络,如果侵犯了您的权益,请联系站长删除!