关于ODP.NET连接数监控及相应的windbg分析提示
1、关于ODP.NET的Windows计数器问题
使用微软的缺省驱动时,可以通过windows性能监视器很方便的监控数据库连接数,选择.NET Data Provider for Oracle/Sqlserver中的NumberOfPooledConnections即可。但是微软早就放弃了对Oracle驱动的更新,该驱动不仅在性能上比较差(读取40000 rows * 30 cols的数据,仅数据转换大约耗时25秒,而ODP.NET仅需5秒),更悲催的是System.Data.OracleClient还有不少bug….本人就在一个项目上遇到数据行翻倍的事情,更新使用ODP.NET后原来的计数器自然就不能使用了,安装Oracle客户端时选择ODP.NET组件后,Windows计数器中会出现Oracle Data Provider for .NET的选项,但选择对应的子项和实例后却看不到任何信息,原来缺省是没有启用的。可以通过修改注册表启用计数器:HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\ODP.NET\Assembly_Version,找到PerformanceCounters,将该值改为4095即可,然后重启IIS或回收应用程序池。
参考资料: http://blog.csdn.net/debug_fan/article/details/8973467
另外,根据dump分析看,监视器中显示的NumberOfPooledConnections仅包含正在使用的连接,如果要看所有打开的连接应该在加上NumberOfFreeConnections计数器。
2、关于ODP.NET在dump分析的查找
使用windbg分析dump时,遇到ODP.NET在实现ADO.NET接口的内部实现特立独行的问题,按照微软缺省的方式找了半天,在此记录备忘。
Command ---> m_connection [OracleConnection] ---> 1) m_conString [String] ; 2) m_opoConCtx [OpoConCtx] ---> pool [ConnectionPool] ---> m_connections [Collections.Stack] ---> _s [Collections.Stack] ---> _array (System.Object[])
也可以通过 命令直接查找连接或连接池:
!dumpheap -type Oracle.DataAccess.Client.ConnectionPool
!dumpheap -type Oracle.DataAccess.Client.OracleConnection
另外,还有全托管驱动的问题Oracle.ManagedDataAccess.Client,该实现的命令及路径跟ODP.NET又有很大不同。
Oracle.ManagedDataAccess.Client.OracleConnection
具体实现是下面两个
OracleInternal.ServiceObjects.OracleConnectionImpl
OracleInternal.ConnectionPool.OraclePoolManager
连接字符串也很特别,是在两处分开存储的: OracleConnection的ConnectionString --->m_constring \ m_compString \ m_passwordlessConString 和OracleConnectionImpl 的 m_password
关于ODP.NET连接数监控及相应的windbg分析提示的更多相关文章
- zabbix TCP 连接数监控
直接上配置: 1.修改配置 cat userparameter_tcp_connect.conf UserParameter=tcp_connect.established,/opt/app/zabb ...
- 【原创】大众点评监控平台cat的性能分析
由于工作的原因,或者说我们之前内部监控设计和实现有点不满足现有的研发需求,所以调研了一下大众点评开源出来的cat这一套监控系统. 今天我们就来实验一把,cat的客户端埋点在我们的程序流程中上报数据到c ...
- LR监控Windows Server 2008 R2系统资源提示“指定的网络名不可用。”
问题现象: LR监控远程服务器Window Server 2008 R2 系统资源,提示“Monitor name :Windows Resources. Cannot connect to mach ...
- Java GC - 监控回收行为与日志分析
1. 简介 在上一篇介绍<Java GC - 垃圾回收机制>, 本文将介绍如何监控 Javc GC 行为,同时涉及一些GUI工具的使用(虽然有些已经很老并不再更新),监控GC在于判断JVM ...
- 利用StopWatch类监控Java代码执行时间并分析性能
springframework中的StopWatch类可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间.一般用来测量代码执行所用的时间或者计算性能数据,在优化代码性能上可以使用Sto ...
- Java线程详细监控和其dump的分析使用—-分析Java性能瓶颈
转载:https://www.cnblogs.com/firstdream/p/8109352.html 这里对linux下.sun(oracle) JDK的线程资源占用问题的查找步骤做一个小结: l ...
- Linux下Java线程具体监控和其dump的分析使用----分析Java性能瓶颈[张振华-Jack]
作者:张振华(Jack) 这里对linux下.sun(oracle) JDK的线程资源占用问题的查找步骤做一个小结: linux环境下,当发现java进程占用CPU资源非常高,且又要想更进一步查出哪一 ...
- jconsole+idea监控+(jvisualvm 本地内存分析)
1.idea启动配置 添加以下内容 -Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote -Dcom.sun.mana ...
- 一步步教你用Prometheus搭建实时监控系统系列(二)——详细分析拉取和推送两种不同模式
前言 本系列着重介绍Prometheus以及如何用它和其周边的生态来搭建一套属于自己的实时监控告警平台. 本系列受众对象为初次接触Prometheus的用户,大神勿喷,偏重于操作和实战,但是重要的概念 ...
随机推荐
- sqlser 2005 对称加密,非对称加密笔记
一:对称加密 原始明文---密钥---加密数据---密钥---原始明文 速度快,通过算法将明文混淆,占用系统资源少 二:非对称加密 加密解密速度慢,较高的系统资源占用 三:混合数据加密 加密过程:随 ...
- Base64转换二进制文件对象 Blob/Base64转换 File 对象
function convertBase64UrlToBlob(urlData) { var arr = dataurl.split(','),//去掉url的头,并转换为byte type = ar ...
- iOS tableViewCell 在自定义高度方法中遇到的问题,cell高度为0,cell显示不出来,cell直接显示第几个而不是...cell显示个数不对
遇到以上问题可以看看你的cell高度中是否有,自定的高度,有了继续看,没有了继续百度... 在文字排版中,少不了自适应文字高度,行间距什么的:显然cell的高度时不固定的,如果复用自定义的cell的话 ...
- iOS 网络状态判断方案(支持iOS11和iPhoneX)
在之前的iPhone中.我们可以根据导航栏上方的网络状态view.来判断网络状态.(这种方案本来就不太好) 这种方案在iPhone X 手机上.不可使用. 我们可以通过 Reachability 来 ...
- Boost Coroutine2 - stackful coroutine简介
协程可以很轻量的在子例程中进行切换,它由程序员进行子例程的调度(即切换)而不像线程那样需要内核参与,同时也省去了内核线程切换的开销,因为一个协程切换保留的就是函数调用栈和当前指令的寄存器,而线程切换需 ...
- asp.net MVC分页
.Net MVC 分页代码,分页的关键就是在于这几个参数pageIndex ,recordCount,pageSize ,下面是张林的网站做的一个简单的分页代码 效果如图 public class ...
- sublime学习笔记
学习课程地址:快乐的sublime编辑器_sublime编辑器使用 另可参考笔记地址:http://c.haoduoshipin.com/happysublime/ PS:博主的一些文章地址:http ...
- 虚拟机创建流程中neutron代码分析(一)
前言: 在openstack的学习当中有一说法就是网络占学习时间的百分之七十.这个说法或许有夸大的成分,但不可否认的是openstack中的 网络是及其重要的部分,并且难度也是相当大.试图通过nova ...
- 线上平滑升级nginx1.12
.下载相关包,需要和之前用到的依赖包保持一致 wget http://nginx.org/download/nginx-1.12.2.tar.gz wget https://bitbucket.org ...
- Oracle数据库中插入日期型数据(to_date的用法)(转载)
往Oracle数据库中插入日期型数据(to_date的用法) INSERT INTO FLOOR VALUES ( to_date ( '2007-12-20 18:31:34' , 'YYY ...