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

简介: 文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/。 1.背景 最近连续有两个项目现场出现了AGS服务荡掉的问题,一个是通州现场,一个是福州现场。

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处: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/

                                              如果您觉得本文确实帮助了您,可以微信扫一扫,进行小额的打赏和鼓励,谢谢 ^_^

                        

 

目录
相关文章
|
7月前
|
Oracle 关系型数据库 Linux
【赵渝强老师】Oracle数据库配置助手:DBCA
Oracle数据库配置助手(DBCA)是用于创建和配置Oracle数据库的工具,支持图形界面和静默执行模式。本文介绍了使用DBCA在Linux环境下创建数据库的完整步骤,包括选择数据库操作类型、配置存储与网络选项、设置管理密码等,并提供了界面截图与视频讲解,帮助用户快速掌握数据库创建流程。
610 93
|
9月前
|
存储 关系型数据库 数据库
附部署代码|云数据库RDS 全托管 Supabase服务:小白轻松搞定开发AI应用
本文通过一个 Agentic RAG 应用的完整构建流程,展示了如何借助 RDS Supabase 快速搭建具备知识处理与智能决策能力的 AI 应用,展示从数据准备到应用部署的全流程,相较于传统开发模式效率大幅提升。
附部署代码|云数据库RDS 全托管 Supabase服务:小白轻松搞定开发AI应用
|
10月前
|
关系型数据库 MySQL 数据库连接
Django数据库配置避坑指南:从初始化到生产环境的实战优化
本文介绍了Django数据库配置与初始化实战,涵盖MySQL等主流数据库的配置方法及常见问题处理。内容包括数据库连接设置、驱动安装、配置检查、数据表生成、初始数据导入导出,并提供真实项目部署场景的操作步骤与示例代码,适用于开发、测试及生产环境搭建。
458 1
|
7月前
|
Ubuntu 安全 关系型数据库
安装与配置MySQL 8 on Ubuntu,包括权限授予、数据库备份及远程连接指南
以上步骤提供了在Ubuntu上从头开始设置、配置、授权、备份及恢复一个基础但完整的MySQL环境所需知识点。
780 7
|
7月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
1265 5
|
安全 Linux 网络安全
YashanDB数据库服务端SSL连接配置
YashanDB支持通过SSL连接确保数据传输安全,需在服务端生成根证书、服务器证书及DH文件,并将根证书提供给客户端以完成身份验证。服务端配置包括使用OpenSSL工具生成证书、设置SSL参数并重启数据库;客户端则需下载根证书并正确配置环境变量与`yasc_env.ini`文件。注意:启用SSL后,所有客户端必须持有根证书才能连接,且SSL与密码认证独立运行。
|
10月前
|
安全 Java 数据库
Jasypt加密数据库配置信息
本文介绍了使用 Jasypt 对配置文件中的公网数据库认证信息进行加密的方法,以提升系统安全性。主要内容包括:1. 背景介绍;2. 前期准备,如依赖导入及版本选择;3. 生成密钥并实现加解密测试;4. 在配置文件中应用加密后的密码,并通过测试接口验证解密结果。确保密码安全的同时,保障系统的正常运行。
700 3
Jasypt加密数据库配置信息
|
9月前
|
SQL XML Java
配置Spring框架以连接SQL Server数据库
最后,需要集成Spring配置到应用中,这通常在 `main`方法或者Spring Boot的应用配置类中通过加载XML配置或使用注解来实现。
684 0
|
12月前
|
Java 关系型数据库 MySQL
JDK、Tomcat、MariaDB数据库和Profile多环境的配置与使用
以上就是JDK、Tomcat、MariaDB数据库和Profile多环境的配置与使用的基本步骤。这些步骤可能会因为你的具体需求和环境而有所不同,但是基本的思路是一样的。希望这些信息能够帮助你更好地理解和使用这些工具。
362 17