如何解决由于服务过多或异常导致ArcGIS Server 无法正常运行的问题
一、问题描述
最近有一个用户向笔者反馈了一个ArcGIS Server使用时发现的一个问题,问题的描述大概是这样的:安装ArcGIS Server的服务器的配置是CPU为8路,内存为16GB,该服务器上共建了近30个服务。服务建立好后,ArcGIS Server的Manager和服务的使用都没有问题,可当服务器重启后,发现ArcGIS Server无法启动。而当手动在Windows服务管理器中启动Server的那三个服务后,系统的CPU占用率达100%!整个服务器直接处于死机状态。并且,此时还无法通过ArcGIS Server Manager或Catalog连接到Server。
二、问题分析
这个问题的起因主要是由于该服务器上Server中发布的服务过多的缘故。对于Server上发布的每个服务,其至少会启动一个SOC进程,而按照ArcGIS官方建议每核启动2 个SOC实例,每个SOC实例预留100-400M内存。
三、解决方法
要解决这个问题最根本的方法便是增加ArcGIS Server 的集群,或停掉暂时不用的服务。而在这个案例中最棘手的部分便是,一旦ArcGIS Server服务启动,整个操作系统便失去响应,同时使用 ArcGIS Server Manager和Catalog也无法访问Server。因此,使用常规方法来停掉服务是不可能的。好在ArcGIS Server 针对高级管理员用户提供了另外一种手段来解决这个问题——ArcGIS Server的服务的配置信息均通过xml存储在Server的安装目录下(%ArcGIS%\Server10.0\server\user\cfg),其后缀名为.cfg,并且一个服务对应一个.cfg文件。
在cfg文件中存储了其对应服务的全部配置信息,当ArcGIS Server服务启动时,Server会自动扫描该目录,并依据各.cfg文件中的配置信息启动相应的服务。.cfg文件内容如下(不同类型服务,其xml格式不同):
<ServerObjectConfiguration>
<Description></Description>
<Properties>
</Properties>
<Recycling>
<Start>00:00</Start>
<Interval>86400</Interval>
</Recycling>
<Info>
<WebEnabled>true</WebEnabled>
</Info>
<IsPooled>true</IsPooled>
<MinInstances>1</MinInstances>
<MaxInstances>2</MaxInstances>
<InstancesPerContainer>1</InstancesPerContainer>
<WaitTimeout>60</WaitTimeout>
<IdleTimeout>1800</IdleTimeout>
<UsageTimeout>600</UsageTimeout>
<CleanupTimeout>30</CleanupTimeout>
<ServiceKeepAliveInterval>-1</ServiceKeepAliveInterval>
<StartupTimeout>300</StartupTimeout>
<Isolation>high</Isolation>
<StartupType>manual</StartupType>
</ServerObjectConfiguration>
同时在该配置文件中还存在一个名为<StartupType>的配置项,当该项的值为automatic时,Server会自动启动该服务;而当其值为manual时,Server则默认不启动该服务。因此,要解决以上问题,我们需要做的就是将该目录下的所有.cfg文件中的StartupType的值全部修改为manual(默认为automatic)。然后再重新启动ArcGIS Server的三个服务,最后当Server正常启动后,我们便可以通过ArcGIS Server manager来对服务进行维护了。重启ArcGIS Server 脚本如下:
@echo ***********************开始关闭ArcGIS Server服务***********************
net stop ArcSOCMonitor /y
net stop "ArcGIS Server Manager Service"
@echo ***********************开始启动ArcGIS Server服务***********************
net start "ArcGIS Server Manager Service"
net start ArcServerObjectManager
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权,作者将保留追究法律责任的权利。另外,也请转载者在评论处留下转载信息,谢谢合作。