一、问题描述
最近有一个用户向笔者反馈了一个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格式不同):
< 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 脚本如下:
net stop ArcSOCMonitor /y
net stop "ArcGIS Server Manager Service"
@echo ***********************开始启动ArcGIS Server服务***********************
net start "ArcGIS Server Manager Service"
net start ArcServerObjectManager