zoukankan      html  css  js  c++  java
  • 大蟒蛇肚子的"风暴"

    遇到了数据库连接数不足的问题,一般情况下会预留一些会话增加的情况,但在一些特殊情况下如连接风暴(logon storm), 如果在监听中没有做rate限流,对数据库来说巨大的冲击可能会导致数据库Hang 或 ora-20 或ora-18 错误。 对于Hang并伴有进程数不足的情况,AWR、ASH 都可能无法升成,甚至数据库都无法登录或做SSD 都不成功, 这时候LISTENER.LOG 就成了关键的“破案”线索。
    以往往往会用一些shell命令进行分析,如:
    $ fgrep "establish" anbob_listener.log |awk '{print $1 " " $2}' |awk -F: '{print $1 ":" $2 ":" $3 }' |sort |uniq -c
     
    分析时需要用肉眼查看结果,有些时候还会碰到一些状况,监听日志已经拷贝到windows下,还得传输至虚拟机下才能进行分析。
    这时候往往就会想有工具可以跨平台,能自动生成图表就更好了。后来认识到了大蟒蛇,发现它这方面的能力非常。
    今天,来分享一下怎么用大蟒蛇去对监听日志进行分析,并生成以下图表:
     
     
     
    这是一个二维图,需要有x轴和y轴数据,然后在进行组图。
    监听日志有些数据时有效的,有些是无效的
    有效数据条目:
    "05-AUG-2016 12:02:12 * (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=bomcdb)(CID=(PROGRAM=perl)(HOST=NMC-PREDEAL1)(USER=nmcuser))) * (ADDRESS=(PROTOCOL=tcp)(HOST=172.16.2.18)(PORT=57862)) * establish * bomcdb * 0"
    
    
    数据条目:
    05-AUG-2016 13:25:06 * ping * 0
    
    
    在数据处理时,特意把包含以下字符service_update、ping、status的数据过滤掉,进行统计。
    if str.__contains__("service_update") or str.__contains__("ping") or str.__contains__("status") == 1:
    
    
    当获取到的数据都是有效后,我们要对数据进行拆分,继续获取我们想获取的数据,由于只做统计,那么只要日期即可:
    x = str.split('*')[0]
    发现数据结尾包含一个空间,将空格进行去除
    temp = x.strip()
    
    
    监听日志的数据拆分完毕,把这些数据存放至一个数组 lsn_data中(这里可能大家有点疑惑,为啥不建二维数组呢?python不存在多维数组)。
    
    
    
    
    因为监听日志有一个很特别的地方,数据本来就是有序的,无需排序,只需去重,把数据放到数据lsn_time中,在处理过程中,可以统计时间的个数并放到数组lsn_count中
    # 去重
    for l_time in lsn_data:
    if l_time not in lsn_time:
    lsn_time.append(l_time)
    lsn_count.append(lsn_data.count(l_time))
    
    
    数据已经有了,我们只要把数据画图,即可出现上述的图表。
    
    
    可以把这些数据用图展示,也可以用表展示。这里用图进行展示
     
    s = Series(lsn_count,index=lsn_time)
    s1 = Series(16,index=lsn_time)
    plt.ylim(0,80)
    s.plot()
    s1.plot(color='red', linestyle='--')
    plt.show()
    
    
    用series()函数进行画图,lsn_count为纵坐标,index作为横坐标。在这里我加了1条红色的先s1,用虚线展示。在2013年,广东ngboss上线之初,某库经常出现tnsping缓慢问题。后来经美国实验室测试,每秒的连接数达到16个监听连接就会缓慢。若生成的图表长时间超过红色虚线,那就应该对应用进行拆分整理,避免监听风暴的产生。
  • 相关阅读:
    一:多线程--多线程简单介绍
    五:网络--多线程断点下载
    四:网络--NSURLConnection基本使用
    三:网络--数据安全/加密
    二:网络--GET请求和POST请求
    一:网络--HTTP协议
    源代码管理工具GIT
    MyBatis 多参问题
    jquery 事件
    jquery点击事件
  • 原文地址:https://www.cnblogs.com/nolanchan/p/8016346.html
Copyright © 2011-2022 走看看