ArcGIS Server浏览地图服务无响应原因分析说明
1、问题描述
从4月17号下午5时起,至18号晚9点,客户单位部分通过ArcGIS Server发布的地图服务(该部分地图服务的数据源为数据库SJZX)无法加载浏览,表现为长时间无响应。同时,通过ArcMap加载数据库中的要素类时,表现为"卡死",并长久无响应。
2、问题观察
通过收集该时间段内某1小时之间的性能数据,得到其耗时排名前6的SQL如下:


发现SQL ID 为gj2c1wk1brmaa 和 bxqcnpc5q5330 的两个SQL,其在1个小时的跨度内,执行次数为0。这说明,在这1个小时之内,该SQL一直在执行,且没有结束。SQL ID为bxqcnpc5q5330的SQL执行时间为3624秒,接近完整的1小时(3600s);SQL ID为gj2c1wk1brmaa的SQL执行时间为271786秒,这说明有271786/3600=75个进程在执行这个操作,且持续1小时未结束。
继续观察,发现这两个SQL都与TABLE_LOCKS表有关,SQL ID为bxqcnpc5q5330的SQL在执行时需要获得该表的排它锁;SQL ID为gj2c1wk1brmaa的SQL在执行时需要获得该表的共享锁(即TM锁)。猜测,这两条SQL长时间未执行结束,其根本原因在于无法获得其所需要的锁,即TABLE_LOCKS上发生了锁的阻塞。
3、问题分析
SQL ID为bxqcnpc5q5330的SQL需要获得排它锁,它可能被其它的排它锁或共享锁(TM锁)阻塞。
SQL ID为gj2c1wk1brmaa的SQL对TABLE_LOCKS表中的记录进行删除操作,需要获得该表的共享锁(TM锁),它可能被排它锁阻塞。
我们作两种假设:
1)TABLE_LOCKS上已经有其它的排它锁
这时候,符合bxqcnpc5q5330、gj2c1wk1brmaa两个SQL的表现。但排名前6的SQL中,还有cffvq2hst53md、00xnu55uqdns0、3ub7rzsp3rpyh 三个SQL有成功执行的次数(这三个SQL分别是向TABLE_LOCKS表中增加记录、获得TABLE_LOCKS的共享锁、根据PID(进程ID)删除TABLE_LOCKS表中记录),如果TABLE_LOCKS上已经有其它的排它锁,这几个SQL也会被阻塞,不可能执行成功。因此TABLE_LOCKS上已经有其它的排它锁的假设不成立。
2)TABLE_LOCKS上有未释放的共享锁(TM锁)
这时侯,TABLE_LOCKS上的共享锁(TM锁)会阻塞bxqcnpc5q5330 SQL,但bxqcnpc5q5330 SQL之前的共享锁(TM锁)请求不会被阻塞(包括cffvq2hst53md、00xnu55uqdns0、3ub7rzsp3rpyh),bxqcnpc5q5330 SQL之后的共享锁(TM锁)请求会被bxqcnpc5q5330 SQL的排它锁请求阻塞(尽管bxqcnpc5q5330 SQL还没有真正获得到锁,但它在锁的队列中会阻塞发生在它之后的SQL)。因此,该假设符合目前观察到的现象。
4、现象模拟再现
根据上述问题分析结果,我们可以基于假设条件进行现象模拟再现。
1)TABLE_LOCKS上有未释放的共享锁(TM锁)
当对TABLE_LOCKS执行了新增、删除、更新操作,但未提交事务时(有可能是事务异常结束),共享锁(TM锁)将不会释放。

2)对TABLE_LOCKS请求排它锁
当使用ARCMAP、ARCCATALOG对database connection中的对象(包括要素类、要素集、表等)进行删除操作时,会请求排它锁。


该会话请求的锁模式为6,即排它锁。

已经开始出现"卡死"并长时间无影响的现象。
3)对TABLE_LOCKS请求共享锁
通过ARCMAP、ARCCATALOG加载图层时,需要向TABLE_LOCKS中增加1条记录,此时需要请求TABLE_LOCKS表上的共享锁。

此时加载图层已被阻塞。
4)释放第1)步中的共享锁(TM锁)


所有的阻塞都迎刃而解了。
ArcGIS Server浏览地图服务无响应原因分析说明的更多相关文章
- ArcGIS Server SOE地图服务重启特别卡
ArcGIS Server 服务器端扩展,SOE代码调试时,需要经常重新编译.替换地图服务中的扩展, 由于未知问题,本地开发环境包含SOE的地图服务,每次重启都需要耗费相当长的时间,大体上20多分钟, ...
- ArcGis server发布地图服务
ArcGIS server发布服务: 首先修改地图文档属性中的关联默认数据库 最后使用分享将地图服务发布到server上,是地图服务可以使用: 注意一定要勾选 Feature Access选项 fea ...
- tomcat服务无响应堆栈分析
tomcat服务突然无响应了,导出内存堆栈和线程堆栈,分析后发现是同步锁使用不合理导致的. [root@prd-dtb-web-01 ~]# [root@prd-dtb-web-01 ~]# jmap ...
- 一次Mysql连接池卡死导致服务无响应问题分析(.Net Mysql.Data 6.9.9)
问题: 进程启动后,线程数迅速上升至最小线程数后,缓慢上升(线程池限制)到数千,然后由于线程过多,CPU飙升到90%. 对外表现为Api无响应或连接超时. 背景 有些数据存在于另一个机房,通过内网专线 ...
- cloudstack下libvirtd服务无响应问题
在cloudstack4.5.2版本下,偶尔出现libvirtd服务无响应的情况,导致virsh命令无法使用,同时伴随cloudstack master丢失该slave主机连接的情况.最初怀疑是lib ...
- 重写TiledServiceLayer实现Arcgis访问Mapabc地图服务 (转载)
package com.baixin.main;/** * * @ClassName: MapAbcToArcGISTLayer * @Description: ArcGIS访问MapAb ...
- JavaWeb和WebGIS学习笔记(六)——使用ArcGIS for Server发布地图服务
系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gis学习笔记(二)--百度地图API调用 JavaWeb和WebGIS学习笔记(三)-- ...
- ArcGIS pro 发布地图服务(一)动态地图服务
1.软件:arcgis pro 2.4 数据:.mxd文档. 2.导入mxd文档. 3.登录portal账号 4.分析—发布 5.在server中的地图服务 JavaScript api 查看 6. ...
- C#中winform下利用ArcEngine调用ArcGIS Server发布的服务 AE 10
开发环境:vs2010 + AE 10 测试 public Form1() { ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Engi ...
随机推荐
- Vue组件间通信6种方式
摘要: 总有一款合适的通信方式. 作者:浪里行舟 Fundebug经授权转载,版权归原作者所有. 前言 组件是 vue.js 最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的 ...
- Linux的基本指令-Linux从入门到精通第二天(非原创)
文章大纲 一.指令与选项二.基础指令(重点)三.进阶指令(重点)四.学习资料下载五.参考文章 一.指令与选项 什么是Linux的指令?指在Linux终端(命令行)中输入的内容就称之为指令. 一 ...
- “GIS DICTIONARY A-Z” 查询页面开发(2)——INSERT INTO数据库
今日工作:数据库连接.数据写入 一.数据库连接:使用了pymysql库 from G2_dataClean import defList import pymysql db = pymysql.con ...
- 是否忘记了向源中添加“#include "StdAfx.h"”?
错误分析 此错误发生的原因是编译器在寻找预编译指示头文件(默认#include "stdafx.h")时,文件未预期结束.没有找到预编译指示信息的头文件"stdafx.h ...
- 利用 FluentScheduler 启动定时器计划任务
FluentScheduler 是什么? Automated job scheduler with fluent interface. 这是作者在 Github 上的介绍,就是一个定时任务管理器.在 ...
- scikit-leanr 库中的 make_blobs() 函数
sklearn.datasets.make_blobs() 是用于创建多类单标签数据集的函数,它为每个类分配一个或多个正态分布的点集. sklearn.datasets.make_blobs( n_s ...
- Graph Embedding总结
图嵌入应用场景:可用于推荐,节点分类,链接预测(link prediction),可视化等场景 一.考虑网络结构 1.DeepWalk (KDD 2014) (1)简介 DeepWalk = Rand ...
- 【转】Pandas学习笔记(五)合并 concat
Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...
- Python面试题(1)
1.如何反向迭代一个序列 #如果是一个list,最快的方法使用reversetempList = [1,2,3,4]tempList.reverse()for x in tempList: pr ...
- 09-numpy-笔记-repeat
repeat:复制元素 axis = 0 复制每行 axis = 1 复制每列 2 表示复制一遍 不设置axis,复制每个,按行展开成一行. >>> import numpy as ...