-
2021-05-08 07:30:26
Oracle Listener监听风暴处理
经验值:大于25-30连接每秒,监听会出现延迟,故,从连接数量上开始分析。
监听日志信息分析统计:
listener.log:
07-JUN-2016 23:43:05 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=app))(service_name=test)(failover_mode=(type=select)(method=basic))) * (ADDRESS=(PROTOCOL=tcp)(HOST=xxxx.60.12)(PORT=24740)) * establish * test * 0
07-JUN-2016 23:43:05 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=app))(service_name=test)(failover_mode=(type=select)(method=basic))) * (ADDRESS=(PROTOCOL=tcp)(HOST=xxxx.60.11)(PORT=34342)) * establish * test * 0
07-JUN-2016 23:43:05 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=app))(service_name=test)(failover_mode=(type=select)(method=basic))) * (ADDRESS=(PROTOCOL=tcp)(HOST=xxxx.60.10)(PORT=29580)) * establish * test * 0
07-JUN-2016 23:43:05 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=app))(service_name=test)(failover_mode=(type=select)(method=basic))) * (ADDRESS=(PROTOCOL=tcp)(HOST=xxxx.60.8)(PORT=57261)) * establish * test * 0
07-JUN-2016 23:43:05 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=app))(service_name=test)(failover_mode=(type=select)(method=basic))) * (ADDRESS=(PROTOCOL=tcp)(HOST=xxxx.60.17)(PORT=55967)) * establish * test * 0
07-JUN-2016 23:43:06 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=app))(service_name=test)(failover_mode=(type=select)(method=basic))) * (ADDRESS=(PROTOCOL=tcp)(HOST=xxxx.59.18)(PORT=33403)) * establish * test * 0
07-JUN-2016 23:43:06 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=app))(service_name=test)(failover_mode=(type=select)(method=basic))) * (ADDRESS=(PROTOCOL=tcp)(HOST=xxxx.60.10)(PORT=29608)) * establish * test * 0
07-JUN-2016 23:43:06 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=app))(service_name=test)(failover_mode=(type=select)(method=basic))) * (ADDRESS=(PROTOCOL=tcp)(HOST=xxxx.60.13)(PORT=54767)) * establish * test * 0
07-JUN-2016 23:43:06 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=app))(service_name=test)(failover_mode=(type=select)(method=basic))) * (ADDRESS=(PROTOCOL=tcp)(HOST=xxxx.60.10)(PORT=29633)) * establish * test * 0
07-JUN-2016 23:43:06 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=app))(service_name=test)(failover_mode=(type=select)(method=basic))) * (ADDRESS=(PROTOCOL=tcp)(HOST=xxxx.60.10)(PORT=29657)) * establish * test * 0
07-JUN-2016 23:43:06 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=app))(service_name=test)(failover_mode=(type=select)(method=basic))) * (ADDRESS=(PROTOCOL=tcp)(HOST=xxxx.60.12)(PORT=24792)) * establish * test * 0
07-JUN-2016 23:43:06 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=app))(service_name=test)(failover_mode=(type=select)(method=basic))) * (ADDRESS=(PROTOCOL=tcp)(HOST=xxxx.60.14)(PORT=47378)) * establish * test * 0
07-JUN-2016 23:43:06 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=app))(service_name=test)(failover_mode=(type=select)(method=basic))) * (ADDRESS=(PROTOCOL=tcp)(HOST=xxxx.60.18)(PORT=27881)) * establish * test * 0
07-JUN-2016 23:43:06 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=app))(service_name=test)(failover_mode=(type=select)(method=basic))) * (ADDRESS=(PROTOCOL=tcp)(HOST=xxxx.59.8)(PORT=43086)) * establish * test * 0
07-JUN-2016 23:43:06 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=app))(service_name=test)(failover_mode=(type=select)(method=basic))) * (ADDRESS=(PROTOCOL=tcp)(HOST=xxxx.60.9)(PORT=37928)) * establish * test * 0
07-JUN-2016 23:43:06 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=app))(service_name=test)(failover_mode=(type=select)(method=basic))) * (ADDRESS=(PROTOCOL=tcp)(HOST=xxxx.59.10)(PORT=46469)) * establish * test * 0
07-JUN-2016 23:43:06 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=app))(service_name=test)(failover_mode=(type=select)(method=basic))) * (ADDRESS=(PROTOCOL=tcp)(HOST=xxxx.59.9)(PORT=46237)) * establish * test * 0
fgrep "29-JUN-2016 20:10" listener_a.log|fgrep "establish"|awk -F* '{print $1 " " $3}'|awk -F= '{ print $1 " " $4}'|sed -e 's/......$//g'| awk '{print $1 " " $2 " " $4}'|cut -b-20,21- |sort |uniq -c|sort -n +0
3 08-JUN-2016 00:00 xxxx.141.52
3 08-JUN-2016 00:00 xxxx.141.53
2 08-JUN-2016 00:00 xxxx.141.54
17 08-JUN-2016 00:00 xxxx.141.56
16 08-JUN-2016 00:00 xxxx.141.57
3 08-JUN-2016 00:00 xxxx.141.58
8 08-JUN-2016 00:00 xxxx.141.59
13 08-JUN-2016 00:00 xxxx.141.61
19 08-JUN-2016 00:00 xxxx.141.70
16 08-JUN-2016 00:00 xxxx.145.148
15 08-JUN-2016 00:00 xxxx.145.32
11 08-JUN-2016 00:00 xxxx.145.39
15 08-JUN-2016 00:00 xxxx.145.46
14 08-JUN-2016 00:00 xxxx.145.57
18 08-JUN-2016 00:00 xxxx.146.21
1 08-JUN-2016 00:00 xxxx.146.33
12 08-JUN-2016 00:00 xxxx.44.23
6 08-JUN-2016 00:00 xxxx.44.24
1 08-JUN-2016 00:00 xxxx.44.25
6 08-JUN-2016 00:00 xxxx.44.26
7 08-JUN-2016 00:00 xxxx.44.27
7 08-JUN-2016 00:00 xxxx.44.28
6 08-JUN-2016 00:00 xxxx.45.132
6 08-JUN-2016 00:00 xxxx.45.133
7 08-JUN-2016 00:00 xxxx.45.134
7 08-JUN-2016 00:00 xxxx.45.135
11 08-JUN-2016 00:00 xxxx.59.10
6 08-JUN-2016 00:00 xxxx.59.11
11 08-JUN-2016 00:00 xxxx.59.12
6 08-JUN-2016 00:00 xxxx.59.13
12 08-JUN-2016 00:00 xxxx.59.14
8 08-JUN-2016 00:00 xxxx.59.17
2 08-JUN-2016 00:00 xxxx.59.18
4 08-JUN-2016 00:00 xxxx.59.31
54 08-JUN-2016 00:00 xxxx.59.32
3 08-JUN-2016 00:00 xxxx.59.33
8 08-JUN-2016 00:00 xxxx.59.38
2 08-JUN-2016 00:00 xxxx.59.39
27 08-JUN-2016 00:00 xxxx.59.4
53 08-JUN-2016 00:00 xxxx.59.5
12 08-JUN-2016 00:00 xxxx.59.8
16 08-JUN-2016 00:00 xxxx.59.9
9 08-JUN-2016 00:00 xxxx.60.10
9 08-JUN-2016 00:00 xxxx.60.11
9 08-JUN-2016 00:00 xxxx.60.12
4 08-JUN-2016 00:00 xxxx.60.13
11 08-JUN-2016 00:00 xxxx.60.14
5 08-JUN-2016 00:00 xxxx.60.17
15 08-JUN-2016 00:00 xxxx.60.18
12 08-JUN-2016 00:00 xxxx.60.32
7 08-JUN-2016 00:00 xxxx.60.33
5 08-JUN-2016 00:00 xxxx.60.35
13 08-JUN-2016 00:00 xxxx.60.8
14 08-JUN-2016 00:00 xxxx.60.9
3 08-JUN-2016 00:00 xxxx.61.23
处理方法:
1) 增大QUEUESIZE
Latest default queue sizes (as of 2016):
Solaris default QUEUESIZE is 32
Aix default QUEUESIZE is 1024
Linux Default QUEUESIZE is 128
Windows XP (Professional) default QUEUESIZE is 10
Windows Server default QUEUESIZE is 200
LISTENER =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521)(QUEUESIZE = 1024))
)
2)调整连接为长连接(通过中间件或自建连接池方式),缓解监听压力。
更多相关内容 -
Oracle常见故障——Listener类HangCrash及连接风暴的判断
2021-05-08 07:29:08Oracle常见故障——Listener类HangCrash及连接风暴的判断Oracle常见故障——Listener类:Hang、Crash及连接风暴的判断目录监听状态正常,应用反馈时断时连Listener进程crashORA-12514 TNS 监听程序当前无法识别连接...Oracle常见故障——Listener类HangCrash及连接风暴的判断
Oracle常见故障——Listener类:Hang、Crash及连接风暴的判断
目录
监听状态正常,应用反馈时断时连
Listener进程crash
ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务
11G SCAN LISTENER无法注册服务故障
Listener hang
TNS-12535 TNS-00505处理
应用测试连接不上数据库,连接直接报TNS-12547: TNS:lost contact处理
由Oracle的Listener引起的报错很多,很大一部分是由于配置不当导致的。通常,我们要么从tnsnames.ora找原因,要么从lisntener.ora找原因。基本上,我们从Oracle连接的时候报出的错误代码可以快速查到原因。
下面介绍的几类故障及处理方法,难度稍微要大一些
1监听状态正常,应用反馈时断时连
故障现象:
客户端新发起的短连接时断时连,如下所示:
故障原因:
因短连接持续性发起连接耗尽监听ip 1521端口资源,导致监听无法正常处理连接请求。
超过每秒50次连接则需要关注,可通过tail -20f listener.log 观察,如持续性快速刷屏则可能已经出现连接风暴.
故障解决/日志分析:
2Listener进程crash
故障环境:
操作系统为:SunOS 5.10
数据库版本:Oracle 10.2.0.4
故障现象:
Listener进程已经crash, 查看主机数据库监听日志listener_ngsetdb3/4.log如下:
系统日志:
故障分析:
Listener进程crash是由于IPMP出现故障所致,Listener随后在探测不到服务节点时,直接crash。Oracle MOS文章Solaris Cluster 3.x: IPMP group failure impact [ID 1006916.1]对此有详细描述:在Sun Cluster中,短暂的网络故障会导致IPMP组失败,并触发资源组切换。并且,它会在38秒后回切!
处理方法:
查看监听日志listener.log跟系统日志(/var/adm/ messages)。
手动重启两个节点的Listener,Oracle提供了一个解决方案:修改/etc/default/mpathd文件下的IPMP FAILURE_DETECTION_TIME变量值,即将失败检测时间从默认的10秒(10000)增加到20秒(20000)以上
注:修改该参数需要重启mpathd服务。
3ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务
故障现象:
客户端无法通过监听连接数据库
故障原因:
1.实例未注册到listener中,可通过lsnrctl status 查看
2.oracle process达到上限无法建立新的连接。
故障解决:
手工注册数据库,alter system register;
检查数据库用户连接分布情况,并show process 查看连接限制
Select username,count(1) from v$session group by username order by 2 asc;
Ps :大部分情况由开发商程序bug引起。
411G SCAN LISTENER无法注册服务故障
故障现象:
scan listener 无法注册service服务
故障原因:
bug 13066936
故障解决:
5Listener hang
故障环境:
任意环境
故障现象:
从其他应用主机tnsping发现延迟很大
查看监听状态报如下错:
listener.log有如下报错:
故障分析:
Too many open files意味着Maximum Number Of Open Files Per Process 达到了上限。因此listener hang住的原因是该limit设置过小。
处理方法:
将oracle用户的soft limit提升为至少1024,然后重新oracle用户登录,检验ulimit合格后,重新启动数据库和监听。
具体解决办法如下:
在/etc/system增加以下行
set rlim_fd_max=65536
set rlim_fd_cur=4096
重新登录ORACLE并检验oracle用户的限制
su – oracle
ulimit -Ha
ulimit –Sa
重新启动数据库和监听
6TNS-12535 TNS-00505处理
故障环境:
任意环境
故障现象:
Db alert日志报如下错误:
故障分析:
一个客户端连接整个步骤:
客户端发起一个connection连接监听
监听启动一个专属进程(服务器进程,也就是我们通常说的LOCA=NO进程)用于接收这个connection
在专属进程启动之后,监听会将这个connection传递给这个专属进程
专属进程通过这个connection来跟客户端握手
专属进程跟客户端信息交换需要建立一个session
session打开
当在以上的第3步到第4步时客户端关闭,所以当专属进程尝试跟客户端联系时发现连接已关闭时,就会报出我们看到的错误!!
错误一般是由于程序异常断开导致超时,11g R1如果出现如上的错误信息会写入到sqlnet.log,11g R2会写入到alert.log,
其实出现此错误是正常的现象。
处理方法:
如果不想这样的信息打印在alert日志中,
在sqlnet.ora设置
DIAG_ADR_ENABLED = OFF
在listener.ora设置
DIAG_ADR_ENABLED_ = OFF
重启监听
7应用测试连接不上数据库,连接直接报TNS-12547: TNS:lost contact处理
故障环境:
环境:HP-UX 11.31 ia64
数据库版本:11.2.0.4
故障现象:
应用测试连接不上数据库,连接直接报TNS-12547: TNS:lost contact。
但查看监听状态,CRS状态,数据库状态均正常。CRS日志、CSS日志及AGENT日志均无报错。
故障分析:
应用连接数据库直接报TNS-12547: TNS:lost contact
监听日志发现一直在报连接失败:
问题导致的原因有在32位平台中当listener.log超过2G会报这个错。
ORACLE_HOME下的一些执行文件权限不对也会导致相同的错误,但我们这个是64位的,排除第一种,
所以去查询执行文件的权限是否正常。
处理方法:
1、 通过对比发现部分执行文件少了S权限,做了relink all,重新同步执行文件
2、 由于数据库使用的是ASM,磁盘属组为asmadmin,故对比问题节点及正常节点DB ORACLE_HOME下属组为asmadmin的文件,将问题节点文件权限修正即可解决问题。
本文来自云栖社区合作伙伴"DBAplus",原文发布时间:2015-12-23
Oracle常见故障——Listener类HangCrash及连接风暴的判断相关教程
-
Oracle日常运维注意点
2020-12-28 22:32:57Oracle日常运维注意点关于数据库空间管理•添加数据文件时,注意存储I/O资源空闲率•自动扩展模式下的数据文件大小存在限制,即:Block数量2的22次方。如block size大小为8k,则数据文件最大为32G。•建议统一规划...Oracle日常运维注意点
关于数据库空间管理
•添加数据文件时,注意存储I/O资源空闲率
•自动扩展模式下的数据文件大小存在限制,即:Block数量2的22次方。如block size大小为8k,则数据文件最大为32G。
•建议统一规划数据文件大小,8/16G。
关于用户登录
•连续10次密码错误登录将会导致用户被锁
•Oracle 11g以上,用户密码有大小写之分
关于主机登录
•RAC情况下,建议不要使用VIP地址登录到主机。VIP会漂移!
•重大操作前,再次确认当前主机名句酷和当前。建议配置如下环境变量:
exportPS1='\e[31;1m${LOGNAME}@${HOSTNAME}:${PWD}>\e[0m'
关于表格创建
•列的总长度超过8000,引起行连接,从而引起性能下降
•11g创建空表时默认不占物理空间。11.2.0.1时,exp导出时不导空表,bug如下:
创建、删除、修改sequence
•Sequence的cache属性设置过小,从而引起数据库出现latch:row cache objects等待事件。
关于truncate table
•如果表比较大,建议步骤如下:
表增加字段
•高并发环境下,极易导致library cache lock等待事件,从而出现hang
•导致表相关的依赖对象失效,相关会话自动重编译。进而导致出现大规模的library cache lock等待事件
•导致相关cursor失效,引起硬解析风暴
•新增字段如果是NOT NULL的,则一定要有默认值,否则老应用的insert代码可能报错。
•表如果存在老数据,带上默认值的时候会导致oracle去订正老的数据行的新增列。如果老数据非常多,表的并发访问高,很有可能导致大面积的阻塞等待以及产生大事务,甚至有可能导致undo耗尽。
•建议:先不带not null不带默认值加上列,再更改列默认值,再批量订正老数据,然后再加上not null属性。
修改字段长度
•建议只加大长度,而不是缩小
•会引起cursor和相关依赖对象失效,高并发时会出现library cache lock/pin、mutex等待事件
•存储过程报错,建议存储过程声明变量时采用col%type
关于修订(DML)数据
•严禁仅用一个事务来处理大规模订正(影响的记录数超过1万笔)。大事务修订极易引起undo空间不足报错,从而导致事务回滚。
•条件允许的话,做好原表的备份工作
关于索引创建、重建
•单个索引条目的大小(索引键值的定义长度总和)不能超过6398字节(db_block_size为8k)。
•如何加快索引创建速度:
Ø开启并行:create index idx1 on t1(col1) degree 2;
Ø加大排序区:pga_aggregate_target/sort_area_size
•注意:
Ø索引创建完毕,重新设置degree为1
Ø索引创建时同时会收集统计信息(Oracle 10g及之后),如果表没有或者存在过旧统计信息,则可能会导致执行计划混乱,进而导致SQL性能急剧下降。
关于删除索引
•删除之前建议观察一段时间(一个业务周期):
alterindex idx1 monitoring index usage
•11g之后可以将索引设置为不可见,但后台仍需维护
•删除之前保留索引脚本
关于分区操作
•谨慎评估增加Hash分区,会导致分区建变更
•严禁使用Spilt方式增加分区
Ø若spilt的分区有数据,会导致local index为unusable;一般分区都是大表,后果不堪设想
Ø若spilt的分区有数据,会占用大量的临时段
•list分区严禁给予default分区,否则无法添加其他值的分区
•任何分区删除操作必须加上update global Indexes,防止全局索引失效
关于MOVE表
•Move表的主要目的是更换表空间或者回收空间
•相关索引会失效
•堵塞其他DML会话
•表中不能包含LONG字段
关于exp备份
•模板如下:
cat exp.par
userid=user/password@orcl
direct=y--直接路径导出,加快导出速度
compress=n--避免数据全部压缩在一个数据块上
file=exp.dmp
log=exp.log
recordlength=65535--写dmp文件时一次IO的大小,上限是65535,可以加快导出速度
tables=t1
关于imp
•模板如下:
cat imp_ws0208.par
userid=user/password
commit=y--开启批量提交,避免长事务
ignore=y--如果目标表已经存在,只导入数据
fromuser=yyc
touser=zzzzzz
tables=yz_ongimt_jingtzt
file=exp0208.dmp
log=imp0208.log
buffer=100000
-
Grid用户的环境变量如下所示: export ORACLE_BASE=/u01/app/grid export ORACLE_HOME =/u01/app/11.2.0.2/grid PATH=$ORACLE_HOME/bin:$PATH:$HOME/bin Oracle用户的环境变量如下所示: export ORACLE_BASE=/u01/...
-
JBOSS连接池 合理设置min和max | 好开发
2021-05-03 05:57:13我们先来看看连接数设置不合理可能产生的后果:连接池MIN设置过小,应用业务量突增,或者启动时可能产生连接风暴。连接池MIN值设置过大,会造成资源的浪费,主要包括数据库和应用内存,连接数的浪费,同时连接池MIN值...连接池设置不合理可能导致的后果
连接池的MIN数和MAX数,看似很简单的两个参数,其实对于应用和数据库的影响,并不是那么的简单。我们先来看看连接数设置不合理可能产生的后果:
连接池MIN设置过小,应用业务量突增,或者启动时可能产生连接风暴。
连接池MIN值设置过大,会造成资源的浪费,主要包括数据库和应用内存,连接数的浪费,同时连接池MIN值设置过大,也会导致连接被频繁的创建和销毁。这是由连接池的工作机制决定的。
连接池MAX值设置过大。在极端情况下,当应用发生异常时,会导致连接数被撑到MAX值,有可能导致数据库连接数被耗尽,从而导致正常的业务受到影响。当连接数被撑到MAX值,在获取连接超时的时候,应用的线程池也有可能受到影响,这是一系列的连锁反应。
以上是连接池MIN值和MAX值设置最主要的3点影响。其中,影响最大的并且最难配置的是第2点,即连接数的MIN值设置。
设置连接池的min-pool-size
一般来说,我们可以按照业务高峰时期的压力来估算连接数。比如,在高峰时期,每秒有5000个并发请求,每个请求的处理时间为2ms,则每秒总共需要5000*2ms=10s的连接处理时间。因此,连接数的MIN值我们可以设置为10个(适当上浮1-2个),这样就能基本上解决连接风暴的问题了。当然在业务低峰时期,10个连接数的设置可能偏大了点,所以这里对于连接数的MIN值设置也做了一个权衡,保守起见,我们需要以高峰时需要的正常连接数来设置MIN值,以避免连接风暴的发生。因为这样做是最保险的,当然,这带了一些额外的代价,会牺牲掉部分的数据库和应用的资源。
有时候,我们对于业务的估计可能并不准备,如业务刚上线,对于连接数不能很好的评估,这个时候我们可以对连接池的MIN值进行调优,共有两种方式,如下:
通过ORACLE监听日志对min-pool-size调优
对于ORACLE数据库,我们可以使用数据库的监听日志来进行调优,即通过listener.log(数据库监听日志)进行调优。收集以下几个信息:
1. 根据监听日志,我们可以得到某个应用集群A在2小时内创建的连接总数,假设统计一共为N个。
2. 假设A集群在2小时内的连接数维持在一个值:M。(后面会对这个M进行说明)
3. A集群有S台应用服务器,假设应用服务器负载均衡。
我们知道,连接池IDLE清理是15分钟执行一次的,每次清理空闲时间超过30分钟的连接。所以,2小时内,每台应用平均创建的连接数为:N/4S个。
假设:
1. M=min连接数,则我们的应用可以下调的MIN连接数为N/4S个,即设置为M-N/4S。(由连接池的原理可以知道,这些新创建的连接完全都是空闲的连接,只是由于配置了MIN值较大而产生的,实际上这些连接一直处于空闲状态)
2.假设M值>min连接数,则需要将min值设置为M。
3.假设M
之前对于某核心系统做的一次调优,上线后效果很不错,参考一个生产库的JBOSS连接池调整优化及分析
通过监控JBOSS连接池对min-pool-size的调优
连接池默认参数及获取连接池中相关的统计信息一节中,我们提到了连接池中有一些方法可以获取连接数的信息,其中有三个方法:
//获取连接数,内部执行:return created - destroyed;即所有创建的连接数-所有销毁的连接数
public int getConnectionCount()
{
return connectionCounter.getCount();
}
//创建连接的总数
public int getConnectionCreatedCount()
{
return connectionCounter.getCreatedCount();
}
//连接销毁总数
public int getConnectionDestroyedCount()
{
return connectionCounter.getDestroyedCount();
}
通过监控这三个参数我们即可进行连接数的调优,具体的调优方式和方法1一致,只是我们获取创建的连接数,通过监控连接池中的状态获取。如下图所示,我们监控了10:00-12:00数据库的连接数:
通过上面的图可以知道,我们的连接数MIN值设置过大了(上图是对于单台应用的连接池监控)。因为连接池始终保持在MIN值10个,说明连接数过剩,而我们的连接池不停的创建,销毁。由于定时任务是15分钟启动1次的,所以我们在图上可以看到每隔15分钟说有1个连接被销毁。在30分钟平均有2个连接被销毁。根据同样的ORACLE监听日志的调优算法:
我们的连接数可以被设置为M-N/4S,即10-8/4=8个。
这是二种连接池MIN调整的方案。其实原理是完全一样的,只是获取数据的两种方式不同,对于有条件的应用,建议监控JBOSS的连接池进行调优。这样,连接池的一切状态,都会尽在掌握之中,调优也会变的更加简单高效。
设置连接的max-pool-size
其实我们在调整连接池MIN值的时候,已经是按业务的高峰时期进行调整。所以MAX值调整的意义其实并不大,我们只要将MAX值设置在一个安全的阀值即可。保证不超过数据库的连接数,同时又保证在业务偶尔分布不均匀时,应用也能够获取连接,防止连接池取不到的情况。
我们经常会看到应用程序报错:“No ManagedConnections available within configured blocking timeout xx [ms]”,这其实是由于连接池达到最大值了,没有可用的连接的时候产生的。(参考:JBOSS连接池4-从连接池中获取连接及返还连接)。产生这个问题,最根本的原因往往并不是连接数不够用,我们应该首先看看数据库的响应和应用DAO的响应时间。有时候因为SQL走不上索引,或者数据库响应较慢,会增加业务占用连接的时间(即处理时间),这种情况下,加大MAX连接数可以从一定程序上缓解问题,但是不能解决根本的问题。
blocking-timeout-millis的设置
另外一点建议是,将blocking-timeout-millis参数设置的尽量小一点,这个参数是应用getconnection时的超时时间,只在连接数达到MAX值时才会起作用,因为连接数没到达MAX值,这个获取连接是一个很快的操作,内部仅仅是执行一个获取信号量的操作。为了尽量的减小在获取不到连接而等待超时对应用线程池的阻塞,我们需要将blocking-timeout-millis参数设置为一个较小的值即可,这样,当连接池中无可用的连接时,由于超时时间减小了,可以避免由于线程池共享造成对其它正常业务的影响,特别是一个应用连接多个数据源时,这个值的设置尤其重要。
总结
实际我们对于连接池的调优,需要从连接池的原理入手,只有理解了原理,才能够更好的将连接池控制在我们所想要的一个状态。因为连接池的不合理设置所产生的问题,我们在上面吃的亏很多。就因为一个小小的连接池出了问题,现在看来实在有点得不偿失。
真实的场景中,特别是基于数据库的水平拆分,或者读写分离的场景中,当一个应用集群需要连接多个数据源时,我们尤其需要考虑连接池的这几个参数:prepared-statement-cache-size,min-pool-size, max-pool-size, blocking-timeout-millis。这几参数设置的利害关系,需要仔细的考虑。另外,我们还需要重点考虑2个点:
对于物理库-逻辑库中,数据源共享和不共享的取舍。
prepared-statement-cache-size,min-pool-size值的设置,数据源个数,fetchsize的设置 直接影响到JVM内存的使用。
-
Oracle Coherence中文教程七:设置群集
2015-08-18 00:15:25该的集群协议使得非常明智地使用组播和避免的东西,如多播风暴。默认情况下,数据传输组播,如果它的目的是为超过 25 %的群集成员。绝大多数的流量使用单播,即使启动了组播传输。对于典型的基于分区的高速缓存集群... -
[Spark版本更新]--2.3.0发行说明
2018-03-03 11:20:28] - 实现在键值存储中保存应用程序状态数据的监听器 · [ SPARK-20644 ] - 将Spark UI连接到新的键值存储后端 · [ SPARK-20645 ] - 使环境页面使用新的应用程序状态存储 · [ SPARK-20646 ] - 使... -
渗透测试-信息搜集的目的和方法
2022-05-09 18:07:39信息搜集的意义—测试渗透的灵魂 信息搜集的意义----------渗透测试的灵魂 (信息收集重中之中) 信息收集4-1 提出问题:头脑风暴 扩大攻击面 一、重要性–为什么要信息收集? 1、信息收集的作用: 最了解的你人,... -
计算机网络实验报告
2021-12-08 14:13:58开课学院:信息科学与工程学院 专业年级班级:计算机科学与技术1903班 实验课程名称:计算机网络实验 指导老师:王勇 实验一 -
后端知识查漏补缺学习轨迹(长期更新)
2022-02-06 17:21:09原理 2022-03-12 UNSAFE 概念 功能介绍 volatile 和 总线风暴 MESI(缓存一致性协议) Callable和Runnable的区别 2022-03-13 CAP理论 概念 BASE理论 概念 zookeeper相关 Zookeeper 文件系统 Zookeeper 保证了如下... -
DDD---领域驱动设计(一)
2021-08-27 01:22:30文章目录前言一、DDD的优势二、领域模型的重要性三、DDD落地代表四、DDD建设流程4.1 战略设计4.1.1通用语言4.1.2 限界上下文4.1.3 领域子域核心域通用域支撑域4.1.3 上下文映射4.1.4 事件风暴分析问题空间4.2 战术... -
网络基础(华为篇)
2021-10-08 10:02:39防火墙可以防止伪装成 内部信任 主机的IP地址欺骗 IETF在1997年为了解决RIP协议与IPv6的兼容性问题提出了RIPng标准,它的度量是基于跳数(hops count)的,每经过一台路由器,路径的跳数加l。路由算法会优先选择跳数... -
超详细面试准备(10分钟打遍所有初级后端开发面试)
2021-02-23 23:20:09面试知识汇总 如何介绍项目: https://www.sohu.com/a/259724527_775404 自我介绍:https://www.jianshu.com/p/008fc86a1f28 4W字的后端面试知识点总结: ...后端技术框架: ...数据结构 Java HashMap原理: ... -
大数据平台建设关键技术
2021-02-22 16:16:19事务型数据库 数据仓库兴起的早期,尚未出现专用数据仓库系统,业界采用传统的事务性关系型数据库构建数据仓库,如以Oracle或DB2数据库为存储核心的解决方案。通常采用数据库集群架构,也就是SMP( Symmetric Multi ... -
计算机网络面试总结
2021-07-31 15:21:37整个过程第三方即使监听到了数据,也束手无策。 加密 客户端和服务端之间的加密机制: TLS协议是基于TCP协议之上的,图中第一个蓝色往返是TCP的握手过程,之后两次橙色的往返,我们可以叫做TLS的握手。握手过程如下... -
刷题杂记 ①
2021-04-19 22:21:02Oracle有几种表关联方式,有何区别? inner join、内连接,当关联的左右两个表记录都存在时,记录才会出现在关联结果中。 left join、外连接、保证左表记录都保留在关联结果中,而记录在右表总关联不上的则置为空 ... -
计算机三级网络技术知识点总结与考试技巧--选择题篇
2021-04-17 09:35:06VLAN相当于OSI参考模型的第二层的广播域,能够将广播风暴控制在一个VLAN内部,划分VLAN后,由于广播域的缩小,网络中广播包消耗带宽所占的比例大大降低,网络的性能得到显著的提高。这个可以参考OSI七层模型,或者想... -
计算机考研面试汇总
2021-03-23 12:49:05数据结构 数据三要素----数据的:逻辑结构,存储结构,运算 时间复杂度–将算法中基本运算的执行次数的数量级作为时间复杂度。 顺序表有哪些缺点?(逻辑上相邻的元素,在物理位置上也相邻) 优点:顺序表支持随机... -
网络
2021-03-09 15:21:03网络和磁盘IO是影响较大 ... Oracle 收费的大型数据库,Oracle公司的产品 . Oracle收购SUN公司,收购MYSQL . DB2 IBM公司的数据库产品,收费的 . 常应用在银行系统中. SQLServer MicroSoft 公司收费的中... -
转型Java微服务
2021-04-06 08:40:01/** * * 代码生成器 * * * @author yiquan * @since 2021-02-22 10:41 **/ public class CodeGenerator { /** * 监听输入 * * @param tip 监听输入项 * @return 输入内容 * @throws MybatisPlusException 输入异常... -
深藏不露得Java关键字 ‘’ Volatile
2020-07-17 19:48:25前言 volatile关键字好像我们一直听人提起,但是工作中实际...终于,在Oracle官方谈及原子操作的时候有这样一段话: In programming, an atomic action is one that effectively happens all at once. An atomic ac -
[面面面]一篇搞定计算机面试常见知识点(10w字更新中)
2020-12-29 17:08:28写这篇文章的目的是为了在摸鱼或者备考时打开看一看,感受一下计算机知识海洋的浩瀚。本文部分内容是我自己的理解也有部分是网络上我认为总结的比较好进而抄录整理得来。 -
NoSQL之Redis配置与优化
2020-09-09 10:10:133、配置文件 4、连接redis服务 6、查看Redis内存使用 NoSQL之Redis配置与优化 一、概览 1、关系数据库与非关系型数据库 1、关系型数据库 一个结构化的数据库,创建在关系模型基础上 一般面向于记录 包括----Oracle、... -
两周面试突击
2020-11-19 15:39:383、学习数据库的基础知识和开发应用软件开发离不了数据库,掌握几种流行的数据库:Oracle、SQL、server、MySQL等。 4、JEE基础在这里首先要学习网站基础,包括HTML、DHTML、JavaScript;接着要学习XML,XML JAXP;... -
NoSQL数据库Redis--1
2020-10-25 22:19:482.6.2.2 订阅者监听频道 2.6.2.3 发布者发布消息 2.6.2.4 各个订阅者都能收到消息 2.6.2.5 订阅多个频道 2.6.2.6 订阅所有频道 2.6.2.7 订阅匹配的频道 2.6.2.8 取消订阅 3 redis 集群与高可用 3.1 redis 主从复制 ... -
【文章导读】什么是旁道攻击?Meltdown Redux英特尔漏洞(MDS攻击);KAISER:从用户空间隐藏内核(KAISER...
2020-10-25 14:56:08纳西本人以及本·古里安(Ben Gurion)的一组研究人员,上周揭示了一种技术,该技术可以通过使用望远镜观察室内悬挂的灯泡的振动来实时监听房间内的谈话。纳西说:“我将其称为副作用”,这种对旁道的更广泛定义... -
A002-185-2531
2021-01-05 18:20:08用于需求引出的技术包括访谈、头脑风暴、任务分析、Delphi 技术、原型设计等。这里将讨论其中一些。引文不会产生所理解的要求的正式模型。相反,它拓宽了分析师的域知识,从而有助于为下一阶段提供投入。 需求规范 ... -
面试总结
2020-02-08 11:53:52逻辑上断开环路,防止广播风暴的产生 当线路故障,阻塞接口被激活,恢复通信,起备份线路的作用 动态路由协议 RIP 路由协议工作原理,RIP 是距离-矢量路由选择协议 RIP 度量值为跳数 :最大跳数为 15 跳,... -
用户篇 第12章 可视化中的交互 数据可视化系统除了视觉呈现部分,另一个核心要素是用户交互。人机交互领域的先驱者Stuart K.Card评价“快速的交互可以从根本上改变用户理解数据的进程”。交互是用户通过与系统之间的...