暂无图片
暂无图片
12
暂无图片
暂无图片
5
暂无图片

Oracle Listener连接风暴的分析

IT那活儿 2022-03-28
2796

点击上方“IT那活儿”,关注后了解更多内容,不管IT什么活儿,干就完了!!!

研究背景

如果客户应用程序存在大量短连接,这会导致数据库、服务器资源飙升,并且会导致监听无法响应更多请求。
本次在测试环境上通过脚本模拟批量连接数据库,复现因连接风暴导致连接数据库报错ORA-12514:  TNS:listener does not currently know of service requested in connect的场景并分析出导致连接风暴的应用服务名。

测试环境

1. 操作系统redhat7

2. 数据库版19.3.0

3. 架构:

测试过程

1. 查看当前数据库参数

2. 编写脚本模拟批量连接-并发执行

编写conn连接脚本:
$vi conn.shsqlplus sys/system@192.168.10.130:1521/orcl as sysdbaselect * from v\$version;exit;$vi conn1.shsqlplus sys/system@192.168.10.130:1521/orcl1 as sysdbaselect * from v\$version;exit;$vi conn2.shsqlplus sys/system@192.168.10.130:1521/orcl2 as sysdbaselect * from v\$version;exit;
复制
编写后台并发执行脚本(connect.sh先执行5分钟,然后再执行connect1.sh):
$vi connect.shfor i in {1..200000}dofor j in {1..40}dosh home/oracle/conn.shdonedoneEOF$vi connect1.shfor i in {1.. 200000}dofor j in {1. .40}dosh home/oracle/conn1.shdonedoneEOF…$vi connect2.shfor i in {1.. 200000}dofor j in {1. .40}dosh home/oracle/conn2.shdonedoneEOF…
复制
3. 执行脚本并观察listener.log
执行脚本:
nohup sh connect.sh > /dev/null 2>&1&nohup sh connect1.sh > /dev/null 2>&1&nohup sh connect2.sh > /dev/null 2>&1&
复制
观察listener.log。
出现大量ORA告警:
[oracle@orcl:/u01/app/oracle/diag/tnslsnr/orcl/listener/trace]$ tail -20f listener.log
复制
接下来通过服务名登录数据库。
这时连接报错,已经复现出ORA-12514报错:
4. 通过监听日志分析是哪个服务名批量连接导致
将监听日志内容导入txt:
$grep '18-FEB-2022'  listener.log | sed 's/\*.*SERVICE_NAME=/ /g;s/).*HOST=/ /g;s/).*$//g'   | awk '{if(NF==4){print "insert into t_tab values('\''"$1"'\'','\''"$2"'\'','\''"$3"'\'','\''"$4"'\'');"}}'   > /home/oracle/insert.sql
复制
建表并导入txt内容:
  • --a1 日期;

  • --a2 时间;

  • --a3 服务名;

  • --a4 客户端ip。

Create table t_tab( a1 varchar2(50),a2  varchar2(50),a3  varchar2(50),a4  varchar2(50));@/home/oracle/insert.sql
复制
按分钟进行统计个service发起的连接数:
select  a1,substr(a2,1,5),a3,count(1) from t_tab where a3 in ('orcl','orcl1','orcl2') group by a1,substr(a2,1,5),a3 order by count(1) desc;
复制
显然,orcl2这个service的连接异常导致本次问题的发生。


测试总结

本次模拟的重点在于通过3.4的方法将监听日志通过grep筛选数据并导入表,查询连接数据库报错的时间段去分析导致连接风暴的服务名称。
日常维护中通过tail -20f listener.log 观察,如持续性快速刷屏则可能已经出现连接风暴,因短连接持续性发起连接耗尽监听ip 1521端口资源,导致监听无法正常处理连接请求。超过每秒50次连接则需要关注。

本文作者:余家豪

本文来源:IT那活儿(上海新炬王翦团队)

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

董小姐
暂无图片 暂无图片
10月前
评论
暂无图片 0
设置多个服务名的初衷和意义是啥?又起不到降低负载的作用?
10月前
暂无图片 点赞
评论
筱悦星辰
暂无图片
1年前
评论
暂无图片 0
爱笑的人运气总不会太差,你对生活微笑,生活才会对你微笑。
1年前
暂无图片 点赞
评论
智慧女孩
暂无图片
3年前
评论
暂无图片 1
学习了学习了
3年前
暂无图片 1
评论
智慧女孩
暂无图片
3年前
评论
暂无图片 1
好厉害😍
3年前
暂无图片 1
评论
Yccccc
暂无图片
3年前
评论
暂无图片 1
3年前
暂无图片 1
评论