解决ArcGIS中因SDE或数据库配置问题而导致服务荡掉的一种思路

1.背景

最近连续有两个项目现场出现了AGS服务荡掉的问题,一个是通州现场,一个是福州现场。

1.1通州现场的问题描述和解决思路

通州现场环境为ArcGIS9.2,使用IMS发布的地图服务,其问题表现为每隔两天左右,其地形图服务便会崩溃一次,重启地形图服务后地图可以正常显示。

因为IMS中地图的出图为动态出图,所以其出图时需要通过连接SDE,此问题的出现很可能是SDE中最大连接数的问题。

1.2福州现场的问题描述和解决思路

福州现场环境为ArcGIS10.0,使用的ArcGIS Server发布的矢量服务(Map Server),其问题表现为基本每天矢量服务都会荡掉一次,重启后,系统便可以正常运行。

矢量服务荡掉有很多种原因,猜想了如下几种可能:

(1)没有定期清除ArcGIS Server中的缓存,导致缓存过多而荡掉。

(2)由于Windows防火墙的原因,Context和SDE的连接限制一段时间后,会被系统Kill掉,然而Context并不知情,于是在空闲一段时间后的第一次访问中,仍然使用该链接,连接不上SDE导致Crash。

(3)矢量查询需要通过SDE连接数据库,会不会SDE的最大连接数设置少了,导致服务荡掉。

(4)因为矢量查询时同样需要用到数据库中的游标,会不会数据库的最大游标数设置少了,导致服务荡掉。

2.解决通州现场问题

2.1首先设置最大连接数

SDE的默认连接数是48个,修改它有两种方式,一种是通过注册表,一种是通过数据库。这里我将两种修改方式都做一个介绍。

2.1.1通过注册表修改

打开SDE的安装目录下的(一般安装路径为C:\ arcgis\ArcSDE\sqlexe\etc)giomgr.defs文件进行编辑,设置CONNECTIONS参数为你的最大连接数。通过命令导入到数据库中:sdeconfig –o import –f C:\arcgis\ArcSDE\sqlexe\etc\giomgr.defs –i esri_sde(数据库实例名) –s (ServerName) –u sde(用户名) –p sde(密码) 。 设置好后需要重启SDE服务才能生效。

2.1.2通过数据库中的

运行select * from sde.server_config;在这个表中修改CONNECTIONS的NUM_PROP_VALUE即可。

2.2 修改TCPKEEPALIVE配置

能够删除无效连接的最大功臣就是TCPKEEPALIVE了。TCPKEEPALIVE参数可以控制数据库是否会根据已配置好的间隔时间来定时检查连接是否为无效连接,如果是,则自动删除该连接。

例如,当TCPKEEPALIVE参数设置为TRUE后,数据库会根据SDE服务所在机器的注册表项KEEPALIVETIME所提供的响应时间,不断侦测所有连接是否为无效连接,如果为无效连接,则自动删除该连接。

此参数的修改跟SDE的最大连接数的修改方式一样,有两种方式,具体可以参考上节描述的方法。

2.3修改 KEEPALIVETIME的配置

这里涉及到另外一个参数:KEEPALIVETIME。

对于操作系统默认安装的机器来说,KEEPALIVETIME注册表项是没有的,而如果没有话,服务器不会主动发送发送KeepAlive数据包来确认空闲连接是否依然毫无变化,也就不会进行删除操作。所以上面提到的无效连接会越来越多。我们可以在如下路径中:Local_Machine\system\CurrentControlSet\Services\Tcpip\Parameters 添加DWORD项:KeepAliveTime。这样系统的注册表中便有了KEEPALIVETIME项。

如果系统中已经有了KEEPALIVETIME项,我们不填写它的值时,它默认的就是两小时。根据网上别人的经验,推荐设置为5分钟。不过具体情况根据项目来定,最后重启SDE才能生效。

2.4 继续修改——修改注册表中的SharedSection

我们在给通州现场设置了以上三个配置后,过了两天,现场反映地图服务还是荡掉了。于是我们再次查资料,发现还有一个关键的地方需要配置——SharedSection。

Windows为每个服务分配了一个固定大小的内存(默认512K)。每个sde进程大约需要9K内存,因此sde默认的连接数为512/9约等于48。

如果我们不修改这个固定大小内存的配置,即使我们已经将SDE的最大连接数配置改成了128,一样无法生效。

按照上面的换算方法,9*128=1152,然后我们适当的将其改成1024。

最后我们在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems\Windows 项中找到SharedSection,并将原SharedSection=1024,3072,512中的第三项改为1024。改完后,到目前已经过了两周,现场反映地图服务没有荡掉过。

3.解决福州现场问题

3.1 修改定期清除缓存——无效果

通过http://192.168.101.9:8399/arcgis/rest/admin这个连接进入管理页面,然后设置每天的一个时刻定期清除缓存。给现场修改后,第二天现场工程人员回复还是荡掉了。

3.2 关掉防火墙,并且设置服务过一段时间后再次连接数据库时先检查连接是否正常——无效果

在服务的ServiceProperties里面设置这个定期检查连接的时间间隔。给现场修改的是30分钟。第二天问现场,现场反馈服务还是荡掉了。

3.3 修改数据库最大游标数、以及SDE最大连接数等相关配置——成功

仔细观察错误日志,发现在众多报错中有如下一个错误。猜想数据库游标数可能设置小了。

通过show parameter open_cursors;查看现场的游标数目为250。

通过select count(*) from v$open_cursor ;查看现场目前的游标打开的数目,发现在矢量服务关闭了的情况下,这个数目已经过了200。

通过alter system set open_cursors=2000 scope=both;将游标数目变大。

为保险起见,通过上面提到过的几个步骤,将SDE的最大连接数以及杀进程的配置等全部修改。

目前已经过了两周,现场没再出现服务荡掉的情况。

4.总结

(1)只修改SDE最大连接数,而不修改注册表中的SharedSection,是无效果的。

(2)由于矢量查询与数据库是有直接联系的,每一次查询均需要使用游标,如果数据库中的游标设置太小,容易引起矢量查询的崩溃。

-----------以上是我解决此问题的思路和方法,如果朋友你有更好的方法,请你留言告知,不甚感激。

解决ArcGIS中因SDE或数据库配置问题而导致服务荡掉的一种思路,布布扣,bubuko.com

时间: 2024-10-19 01:06:59

解决ArcGIS中因SDE或数据库配置问题而导致服务荡掉的一种思路的相关文章

解决jquery中动态新增的元素节点无法触发事件的问题有两种解决方法

解决jquery中动态新增的元素节点无法触发事件的问题有两种解决方法,如下: 为了达到更好的演示效果,假设在某个页面的body下有以下结构的代码: ? 1 2 3 4 5 6 7 8 9 10 11 <p id="pLabel">新加一条</p> <ul id="ulLabel">  <li class="liLabel">aaa1</li>  <li class="li

解决Hibernate中不同包内有形同实体导致映射失败的问题

报错代码如下: Caused by: org.hibernate.DuplicateMappingException: duplicate import: Engin refers to both two.entity.Engin and allview.entity.Engin (try using auto-import="false") at org.hibernate.cfg.Configuration$MappingsImpl.addImport(Configuration.

解决 Json 中 Html 内容因为反编译带有&quot;\&quot;导致 WebView 无法直接加载问题(字符串的查找与替换)

NSString *path = [[NSBundle mainBundle] pathForResource:@"ad_type = 4" ofType:@"html"]; NSString *htmlStr = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; if (htmlStr != nil && [htmlStr rangeO

使用SDE连接Postgre或者SqlServer数据库发布要素地图服务方法

使用SDE连接Postgre数据库或者SqlServer发布要素服务两种方式:1.直接创建一个Geographic DataBase,gdb里面建好图层和属性表,然后在ArcCatalog的数据库连接工具中打开创建好的Postgre或者sqlserver数据库,把gdb里面的表添加进去.2.先在数据库管理工具中创建好数据库和表结构,然后在ArcCatalog中用数据库连接工具打开,在里面再将需要创建图层的表字段导入到空的图形表里面.3.通过步骤1,2创建好数据库后,在ArcGIS中配置地图,发布

解决postgis中.shp格式导入到postgis中.dbf can not be opened的问题

按要求装了postgreSQL 9.3,之前装个9.2.数据库出错了,选择了9.3版本.然后通过Application stack bulider装了 postgis 2.1.装的时候选择了创建一个空的数据库,但屡屡安装失败,取消之后安装成功. 配置了数据库的参数后,选择要导入的.shp文件,更改SRID,这里其实SRID我不太了解,因为每个SRID对应的都对应EPGS编码,打开prj文件,看到了WG_**等很多坐标,但是谁知道选哪一个啊:点击了option设置了编码的方式,先后设置为LANIT

ArcGIS中数据之间的转换接口IFeatureDataConverter2

之前我写过一篇文章关于ArcGIS各种空间数据格式之间转换的通用方法:ArcGIS中sde,mdb,shp数据之间的转换,这里使用的主要接口方法就是用到了IFeatureDataConverter接口的CovertFeatureClass方法,在帮助文档中的说明是"可以被使用来复制或者转换Table,Feature Classes或者是Feature Datasets到其他位置或者数据库格式",具体的步骤,在帮助Converting simple data中写的很清楚详细,这里就不多说

arcgis中的geodatabase模型

简介Geodatabase是ESRI公司定义的一个为ArcGIS所用的数据框架,该框架定义了ArcGIS中用到的所有的数据类型.不管ArcGIS的数据存储到何处.以什么格式存储,都脱离不了该框架.也可以认为Geodatabase是ArcGIS所有支持的数据的一组接口,然后各种数据类型和存储方式都实现了该接口. 例如一个矢量数据,不管其存储成Shape文件,还是存储在Personal Geodatabase(Acess).File Geodatabase(GDB文件夹).SDE for Oracl

解决eclipse中egit中的cannot open git-upload-pack问题

一.背景 今天在使用eclipse的egit插件进行检出远程代码到本地时,出现了cannot open git-upload-pack错误,后经过努力解决该问题,记录下方便回顾和交流! 二.出现原因 1.网络问题,网络出现异常或者不能链接到github 2.eclipse中的egit插件的配置问题 三.解决步骤 1.打开eclipse中的windows-->Preferences 2.选择Team-->Git-->Configuration-->User Settings.然后点A

解决ArcGIS 10.1系列软件安装运行的相关问题

(Destop) 1.卸载旧版本软件,ArcGIS Destop要最后卸载,还有清除注册表 2.要安装破解版本里面的Lisence Manager 3.安装顺序Lisence Manager->Destop->,注意装完LisenceManager后,要停止服务,然后安装Destop,然后把许可文件覆盖到LisenceManager的bin文件下面的service.txt,然后启动服务,重读许可 4.打开ArcGIS Administrator,选择Advanced (ArcInfo)浮动版,