2017-05-23 DBA日记,使用python巧妙分析listener的log.xml,为连接泄漏提供数据支持
来源:互联网 发布:手机淘宝叫快递 编辑:程序博客网 时间:2024/06/04 19:42
背景:
通过观察数据库指标监控平台,发现数据库logon/s 为1.5个,并且出现在业务低峰期。因此怀疑中间件或程序代码出现连接泄密问题,所以需要进一步分析。
分析:
具体描述(S):在每天6-9点,数据库db1上发现logon/s 为1.5个。
收集数据(G-gather):下载listener的log.xml(该文件记录了什么时候,什么IP连接到数据库主机上,连接状态:是否成功连接)到本地进行分析,该文件是是一个非结构化文件,为了方便统计分析,我使用python稍作处理——统计同一IP,连接数据库的次数。处理后数据如下:
IP 连接次数
192.168.1.1 1000
192.168.1.2 800
192.168.1.3 700
192.168.1.4 500
192.168.1.5 1
分析(A):按照“找特例”的方法,首先把192.168.1.1这个标本取出来,进行第二轮分析。
第二轮分析:
具体描述:192.168.1.1这个服务器在3小时以内,产生了1000个新建连接的请求。
收集数据:1)向192.168.1.1的中间件管理员,描述该问题,并请求协助收集数据。如中间件中关于连接池的配置信息。根据中间件管理员的描述在该服务器上的中间件类型jboss,它的连接池属性是最小连接数配置3,最大是10,另一数据源的连接属性是最小连接数配置20,最大是100。 其中有一个关键属性<idle-timeout-minutes> 2 </idle-timeout-minutes>
2) 通过查询数据库gv$session确认是否确实有此多的会话,结果,数据为上只有80多个连接。
分析:在JBOSS配置属性<idle-timeout-minutes>,当连接池空闲会话超过2分钟后,自动回收,所以在闲时,会把所有会话回收,同时又配置了最小连接数,所以,最极端情况,把所有连接销毁,又立刻创建新连接。
结论:
由于JBOSS配置属性<idle-timeout-minutes>配置不恰当,导致连接泄漏。目前建议配置为30分钟。
附录:python分析脚本:
#-*-coding:utf-8 -*-'''分析oracle实例的监听器的log.xml,分析主题如下1. 找出一定时间内,统计app IP产生新连接数据库的次数'''from bs4 import BeautifulSoupimport redef SortList(l1):max_value=0position=0new_l1=[]while (True):if len(l1)==0:breakif len(l1)==1:position=0new_l1.append(l1[position])l1.pop(position)breakmax_value=l1[0][1]for j in range(len(l1)):if l1[j][1]>=max_value:max_value=l1[j][1]position=jtry:new_l1.append(l1[position])l1.pop(position)except:print 'error',position,l1[position-1]print len(l1)return new_l1if __name__ == '__main__':print 'running............'xml=open(r'D:\log.xml','r')contents=xml.readlines()l_ip=[]l_full_ip=[]fmat_c=''for i in contents:fmat_c=fmat_c+i#print contentsprint "read file successful"bs=BeautifulSoup(fmat_c,"html5lib",from_encoding="UTF8")print "format file successful"txt=bs.find_all('txt')for i in txt:found=0result=re.findall(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}',i.string)if len(result)>0:#print result[0]#l_ip.append(result[0])try:for j in range(len(l_ip)):if result[0]==l_ip[j][0]:l_ip[j][1]=l_ip[j][1]+1found=1breakif found==0:l_ip.append([result[0],1])except Exception as e :print(e)#print l_ip.count()print 'sorted:'l=SortList(l_ip)for i in l:print i[0]+' '+str(i[1])xml.close()print '............END............'#print bs
阅读全文
0 0
- 2017-05-23 DBA日记,使用python巧妙分析listener的log.xml,为连接泄漏提供数据支持
- 2017-07-27 DBA日记,使用Python解释mysql 5.6 slowquery.log
- 数据分析师的python日记【1】
- 数据分析师的python日记[2]
- 2017-04-12 DBA日记,频繁commit导致的log file sync的诊断
- 2017-05-11 DBA日记,DTCC DAY-1的收获
- 2017-08-08 DBA日记,使用python模拟高并发访问数据库
- 2017-05-11 DBA日记,导致log file sync单次等待超500ms又一可能
- Python的内存泄漏及gc模块的使用分析
- 为 Web 开发支持 XML 的数据解决方案
- 为 Web 开发支持 XML 的数据解决方案
- 使用Adapter为ListView提供数据的问题
- 使用Xstream为FusionCharts提供XML
- 为php提供ssh2的支持
- 采用数据库为Flex Tree组件的提供数据-XML数据生成
- 巧妙使用static 为数据打包并发送
- HDFS数据迁移解决方案之DistCp工具的巧妙使用分析
- 2017-08-25 DBA日记,telegraf、influxDB、Grafana的安装与基本使用
- 条款 06
- 了解行业信息的几个网站
- JAVA基础知识回顾一 基本类型、类型转化
- XML学习---XML文档解析
- MySQL的lock tables和unlock tables的用法
- 2017-05-23 DBA日记,使用python巧妙分析listener的log.xml,为连接泄漏提供数据支持
- matble中建立结构体数组、sort的排序
- 初入leetcode
- adt 转 Android studio 字符问题
- Unity优化大全(五)之 GPU-动态阴影和Shader
- 基于proteus的51单片机仿真实例六十六、I2C总线上接两个AT24C02读写实例
- redis在windows以服务启动
- Unity 3d打包安卓APK的步骤和问题
- Github简单的学习笔记