基于ArcGIS Server创建地图缓存,切图进程突然内存暴涨导致服务器挂死

用户在使用ArcGIS Server10.2.2进行全球范围的切图过程中,切到某些级别的某些范围时,就出现一个ArcSOC进程所占用的内存突然暴增,一直到把整个机器内存全部耗尽机器挂死。

经过大量测试发现问题和mxd中设置maplex标注密切相关。只要去掉maplex标注,问题即消除。
已邀请:

马克玲

赞同来自: 朱政 mushroom

【解决办法】:
经过大量测试,发现问题产生的根本原因是maplex动态标注引擎运算时,在出错级别由于标注和边界之间的运算错误导致进程内存泄漏。

为了更好的分析问题,整个的测试过程是基于exploded方式来切图的。以下是分析过程:

1,直接发布POI.mxd, 问题稳定复现,对于出错进程异常增长后,手动杀掉进程,然后观察缓存切片路径

发现在创建L14\R00001810\C00003380.png的时候,始终处于lock状态,并出现进程内存泄漏;




2,为了分析C00003380.png具体的位置,以判断出错区域数据情况,将poi点图层删除,只切其它面层

切图成功,但是发现,这种情况下进程并不会创建C00003380.png切片,而是从C00003384.png开始的。这是个重要发现,说明进程在maplex协调动态标注的时候和边界之间发生了冲突(当然,细节我也不清楚),从而引发了进程错误。



3,修改maplex标注引擎的选项,勾选Allow labels to overlap border选项。这个选项会允许标注和border冲突时,标注被自动截断。



修改后,重新发布了服务,果然问题不再出现,切图可以正常了。



上述问题经过和美国Esri技术专家的确认,确系10.3.1之前版本maplex引擎本身的bug, bug说明:

DefectID:- BUG-000093630 

Synopsis:- Maplex labels combined with multiple labels in a .mxd file causes a memory leak when caching with ArcGIS 10.3.1 for Server.

Status:- Closed

Additional Info:-This issue is not reproducible using ArcGIS 10.4 for Server. Complete cache from L0-19 can be generated without any memory leaks at version 10.4. 



该问题在10.4版本已经解决。因此,对于一定要使用maplex标注引擎进行切图的用户,有两个选择:

1)将ArcGIS Server 版本升级至10.4;

2)如果一定要使用老版本,可以通过开启Allow labels to overlap border选项规避问题。

要回复问题请先登录注册