解决ArcGIS中因SDE或数据库配置问题而导致服务宕掉的一种思路
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/。
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的最大连接数以及杀进程的配置等全部修改。
目前已经过了两周,现场没再出现服务荡掉的情况。
不过我总担心游标数设置大了会影响系统,因为,游标在shared pool占有一定的内存,太多会带来浪费,当然也不能太少,太少的话会给系统带来一定压力,引起系统内存争抢。
今天询问了下公司在北京的DBA,他告诉我,游标数量根据现场环境不同而不同,如果会话不多,建议使用会话数*5来设置,如果多的话,比如超过200个会话,那*3也可以,并且,游标数多少对性能影响小,如果你内存资源充足,可以多设置点。
我给现场设置的是2000,这样看来是合理的。
4.总结
(1)只修改SDE最大连接数,而不修改注册表中的SharedSection,是无效果的。
(2)由于矢量查询与数据库是有直接联系的,每一次查询均需要使用游标,如果数据库中的游标设置太小,容易引起矢量查询的崩溃。
-----欢迎转载,但保留版权,请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/
如果您觉得本文确实帮助了您,可以微信扫一扫,进行小额的打赏和鼓励,谢谢 ^_^
解决ArcGIS中因SDE或数据库配置问题而导致服务宕掉的一种思路的更多相关文章
- 解决Hibernate中不同包内有形同实体导致映射失败的问题
报错代码如下: Caused by: org.hibernate.DuplicateMappingException: duplicate import: Engin refers to both t ...
- 解决 MVC4 Code First 数据迁移 数据库发生更改导致调试失败解决方法(二)
文章转载自:http://www.cnblogs.com/amoniyibeizi/p/4486617.html 前几天学MVC过程中,遇到更改Model类以后,运行程序就会出现数据已更改的问题导致调 ...
- angularjs中使用锚点,angular路由导致锚点失效的两种解决方案
壹 ❀ 引 公司新项目开发中,首页要做个楼层导航效果(如下图),要求能点击图标对应跳到楼层即可,因为不需要跳转过度动画,也要求最好别用JQ,想着原生js操作dom计算top的兼容性,想着用锚点实现算 ...
- ArcGIS Engine 添加SDE数据库
public void AddSDELayer(bool ChkSdeLinkModle){ //定义一个属性 IPropertySet propset = new PropertySetCla ...
- 解决SpringDataJpa实体类中属性顺序与数据库中生成字段顺序不一致的问题
一.在application.yml配置中添加数据库根据实体类自动创建数据库表的配置(这里数据库采用MySQL数据库) jpa: database: MYSQL show-sql: true #Hib ...
- C# 保存PictureBox中的图片到数据库,并从数据库读取图片显示到PictrueBox,解决报错 “无效参数”
下面是两段关键代码: /// <summary> /// 将一张图片转换为字节 /// </summary> /// <param name="img" ...
- Mybatis中resultMap的作用-解决实体类属性名和数据库字段不一致
解决实体类属性名和数据库字段不一致
- ArcGIS中文件共享锁定数据溢出 这个方法不行,建议用gdb,不要用mdb
ArcGIS中文件共享锁定数据溢出 (2011-11-24 15:52:41) 转载▼ 标签: 杂谈 分类: GIS 文件共享锁定数溢出.(Error 3052)1. Access数据库,同时操作大量 ...
- arcgis中的geodatabase模型
简介Geodatabase是ESRI公司定义的一个为ArcGIS所用的数据框架,该框架定义了ArcGIS中用到的所有的数据类型.不管ArcGIS的数据存储到何处.以什么格式存储,都脱离不了该框架.也可 ...
随机推荐
- ThinkPHP5 与 ThinkPHP3.* 之间的使用差异
因为研究TP5时间不是很长,暂时先列以下几处差异: 1.过去的单字母函数已完全被替换掉,如下: S=>cache,C=>config,M/D=>model,U=>url,I=& ...
- myeclipse tomcat内存溢出解决方法
Tomcat直接启动正常,通过myeclipse启动tomcat内存溢出.MyEclipse启动Tomcat无视catalina.bat中设置内存大小的问题.在 tomcat的catalina.bat ...
- tar 命令
tar -cf 打包的文件名 打包的文件 ------tar -cf db.all test.txt (-c 表示建立新的包,-f通常是必选项) tar -tf 打包 ...
- java学习笔记(1)
最近开始学习java基本技术,在这里总结一下我学到的内容: 1.Java的基本历史 java起源于SUN公司的一个GREEN的项目,其原先目的是:为家用消费电子产品发送一个信息的分布式代码系统,通过发 ...
- SDOI 2016 排列计数
题目大意:一个数列A,n个元素,其中m个元素不动,其他元素均不在相应位置,问有多少种排列 保证m个元素不动,组合数学直接计算,剩余元素错位排列一下即可 #include<bits/stdc++. ...
- IT人生知识分享:博弈论的理性思维
背景: 昨天看了<最强大脑>,由于节目比较有争议性,不知为什么,作为一名感性的人,就想试一下如果自己理性分析会是怎样的呢? 过程是这样的: 中国队(3人)VS英国队(4人). 1:李建东( ...
- 用rem实现WebApp自适应的优劣分析
关于rem实现屏幕自适应布局的讨论还是比较多的,刚好我也看到使用rem实现自适应的web app,所以也来凑下热闹. 说起rem,免不了要联系到em.px,这里简单提提他们的定义和特点. 1. px: ...
- SpringMVC拦截器详解[附带源码分析]
目录 前言 重要接口及类介绍 源码分析 拦截器的配置 编写自定义的拦截器 总结 总结 前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:h ...
- JavaScript多文件下载
对于文件的下载,可以说是一个十分常见的话题,前端的很多项目中都会有这样的需求,比如 highChart 统计图的导出,在线图片编辑中的图片保存,在线代码编辑的代码导出等等.而很多时候,我们只给了一个链 ...
- Worktile协同特色之一:无处不在的关注
团队沟通中常见问题 在回答这个问题之前,我们不妨先来思考一下,团队成员之间互相配合沟通的几个问题:1. 任务的执行者在完成这个任务时,如何通知到此任务相关联的其他成员,比如该任务的后续任务执行者?2. ...