- 浏览: 5028608 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (2844)
- java (1094)
- hadoop (37)
- jvm (39)
- hbase (11)
- sql (25)
- 异常 (83)
- div css (6)
- 数据库 (95)
- 有趣的code (15)
- struts2 (6)
- spring (124)
- js (44)
- 算法 (65)
- linux (36)
- hibernate (7)
- 中间件 (78)
- 设计模式 (2)
- 架构 (275)
- 操作系统 (91)
- maven (35)
- tapestry (1)
- mybatis (9)
- MQ (101)
- zookeeper (18)
- 搜索引擎,爬虫 (208)
- 分布式计算 (45)
- c# (7)
- 抓包 (28)
- 开源框架 (45)
- 虚拟化 (12)
- mongodb (15)
- 计算机网络 (2)
- 缓存 (97)
- memcached (6)
- 分布式存储 (13)
- scala (5)
- 分词器 (24)
- spark (104)
- 工具 (23)
- netty (5)
- Mahout (6)
- neo4j (6)
- dubbo (36)
- canal (3)
- Hive (10)
- Vert.x (3)
- docker (115)
- 分布式追踪 (2)
- spring boot (5)
- 微服务 (56)
- 淘客 (5)
- mesos (67)
- php (3)
- etcd (2)
- jenkins (4)
- nginx (7)
- 区块链 (1)
- Kubernetes (92)
- 驾照 (1)
- 深度学习 (15)
- JGroups (1)
- 安全 (5)
- 测试 (16)
- 股票 (1)
- Android (2)
- 房产 (1)
- 运维 (6)
- 网关 (3)
最新评论
-
明兜3号:
部署落地+业务迁移 玩转k8s进阶与企业级实践技能(又名:Ku ...
Kubernetes系统常见运维技巧 -
q328965539:
牛掰啊 资料收集的很全面
HDFS小文件处理解决方案总结+facebook(HayStack) + 淘宝(TFS) -
guichou:
fluent挂载了/var/lib/kubelet/pods目 ...
kubernetes上部署Fluentd+Elasticsearch+kibana日志收集系统 -
xu982604405:
System.setProperty("java.r ...
jmx rmi 穿越防火墙问题及jmxmp的替代方案 -
大漠小帆:
麻烦问下,“获取每个Item相似性最高的前N个Item”,这个 ...
协同过滤推荐算法在MapReduce与Spark上实现对比
<property name="removeAbandoned" value="true" />
<!-- 超时时间;单位为秒。180秒=3分钟 -->
<property name="removeAbandonedTimeout" value="180" />
<!-- 关闭abanded连接时输出错误日志 -->
<property name="logAbandoned" value="true" />
使用druid连接池的超时回收机制排查连接泄露问题
1
2
3
4
5
6
7
8
9
10
11
12
13
|
DEBUG: (BaseJdbcLogger.java: 132 ) ooo Using Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl @4d4e22e1 ]
[ 2014 - 07 - 17 15 : 19 : 35 ] 5363945354 [Druid-ConnectionPool-Destory- 1422598563 ] com.alibaba.druid.pool.DruidDataSource: 1132 WARN : (DruidDataSource.java: 1132 ) get/close not same thread
ERROR: (DruidDataSource.java: 1815 ) abandon connection, open stackTrace
at java.lang.Thread.getStackTrace(Thread.java: 1588 )
at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java: 942 )
at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java: 4534 )
at com.alibaba.druid.filter.stat.StatFilter.dataSource_getConnection(StatFilter.java: 661 )
at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java: 4530 )
at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java: 880 )
at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java: 872 )
at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java: 97 )
|
这个是最初的异常, 后面还有一大批异常,
1
2
3
4
5
|
Caused by: java.sql.SQLException: connection holder is null
at com.alibaba.druid.pool.DruidPooledConnection.checkState(DruidPooledConnection.java: 1085 )
at com.alibaba.druid.pool.DruidPooledConnection.getMetaData(DruidPooledConnection.java: 825 )
at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java: 285 )
... 70 more
|
说什么holder为空
第一眼看到holder就像到Spring的源码, 里面到处是holder(笑)
但是这里的holder不是Spirng里面的,是Druid的
这个holder大概是用来hou住连接池里面的连接的.
然后为什么为空了呢? 目测是哪个链接坏了, 或者被意外的关闭了...
根据异常调源码 at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:942)
1
2
3
4
5
6
7
8
9
10
|
941 if (isRemoveAbandoned()) {
942 StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
943 poolalbeConnection.setConnectStackTrace(stackTrace);
poolalbeConnection.setConnectedTimeNano();
poolalbeConnection.setTraceEnable( true );
synchronized (activeConnections) {
activeConnections.put(poolalbeConnection, PRESENT);
}
}
|
看不出啥来. 只能将日志继续看看, 还是看不出啥来
然后看了上面代码几遍后, 老觉得 isRemoveAbandoned() 这个方法有鬼.
查看调用处,:
恩, 这个DestroyConnectionThread非常可疑, 跳
1
2
3
|
if (isRemoveAbandoned()) {
removeAbandoned();
}
|
继续
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
public int removeAbandoned() {
int removeCount = 0 ;
long currrentNanos = System.nanoTime();
List<DruidPooledConnection> abandonedList = new ArrayList<DruidPooledConnection>();
synchronized (activeConnections) {
Iterator<DruidPooledConnection> iter = activeConnections.keySet().iterator();
for (; iter.hasNext();) {
DruidPooledConnection pooledConnection = iter.next();
if (pooledConnection.isRunning()) {
continue ;
}
long timeMillis = (currrentNanos - pooledConnection.getConnectedTimeNano()) / ( 1000 * 1000 );
if (timeMillis >= removeAbandonedTimeoutMillis) {
iter.remove();
pooledConnection.setTraceEnable( false );
abandonedList.add(pooledConnection);
}
}
} ....略
}
|
擦, 这里不对头, timeMillis >= removeAbandonedTimeoutMillis timeMillis 这个是getConnection()被调用时的时间
意思就是一个连接被get后, 超过了 removeAbandonedTimeoutMillis这么久我就弄死你.
然后继续找removeAbandonedTimeoutMillis 这玩意在哪里设置的 ,最后发现是在
<property name="removeAbandoned" value="true" />
<property name="removeAbandonedTimeout" value="1800" />
初始化配置的这里设置的, 这两个参数的大概意思就是,
通过datasource.getConnontion() 取得的连接必须在removeAbandonedTimeout这么多秒内调用close(),要不我就弄死你.(就是conn不能超过指定的租期)
然后调成2个小时~~~
然后程序成功跑完~~~华丽丽的等了50分钟
总结:
连接池为了防止程序从池里取得连接后忘记归还的情况, 而提供了一些参数来设置一个租期, 使用这个可以在一定程度上防止连接泄漏
但是如果你的业务真要跑这么久~~~~那还是注意下这个设置.
http://my.oschina.net/haogrgr/blog/224010
发表评论
-
MyBatis 使用 MyCat 实现多租户的一种简单思路
2017-11-20 18:27 2836本文的多租户是基于多数据库进行实现的,数据是通过不同数据库进 ... -
Otter(一)初识----简介和基本架构图
2017-10-11 11:23 1273tter 初识----简介和基本架构图 ... -
Canal+Otter - 前日篇(1)
2017-10-11 11:21 1193数据库同步中间件Canal+Otter - 前日篇(1) ... -
Otter-入门篇1(阿里开源项目Otter介绍)
2017-10-11 11:16 944Otter-入门篇1(阿里开源项目Otter介绍) ... -
Mysql几种索引类型的区别及适用情况
2017-09-30 16:27 581如大家所知道的,Mysql目前主要有以下几种索引类型:FUL ... -
唯一索引与主键索引的比较
2017-09-29 10:21 1469唯一索引唯一索引不 ... -
主键索引和唯一索引的区别
2017-09-29 10:05 649-- 区别 主键是一种约束,唯一索引是一种索引,两者 ... -
Index column size too large. The maximum column size is 767 bytes
2017-09-28 18:01 1881Index column size too large. T ... -
数据库死锁分析与解决
2017-08-17 10:00 859一、死锁的表现 1、 ... -
mysql,oracle,sql server中的默认事务隔离级别查看,更改
2017-08-09 13:44 1372未提交读(隔离事务的最低级别,只能保证不读取物理上损坏的 ... -
Mycat跨分片Join
2017-08-02 11:26 8761 前言 Mycat目前版本支持跨分片的join,主要实现 ... -
Mycat 分布式事务的实现
2017-08-02 11:27 1368引言:Mycat已经成为了一个强大的开源分布式数据库 ... -
MyCat部署运行(Windows环境)与使用步骤详解
2017-08-02 10:20 8871、MyCat概念 1.1 总体架构 MyCAT的架 ... -
mycat 分片中快速数据迁移思考
2017-07-31 17:42 867操作实践背景: travelrecord表定义 ... -
Mycat水平拆分之十种分片规则
2017-07-31 16:43 872水平切分分片实现 配置schema.xml ... -
博客分类: DB-oracle sqlOracle 1、方式一:使用序列和触发器 Sql代码 收藏代码 SQL> CREATE SEQUENCE te
2017-07-22 09:01 506sqlOracle 1、方式一:使用 ... -
PL/SQL Developer连接本地Oracle 11g 64位数据库
2017-05-16 22:29 7061.登录PL/SQL Developer 这里省略Ora ... -
分库分表的几种常见形式以及可能遇到的难
2017-04-11 23:33 806在谈论数据库架构和数据库优化的时候,我们经常会听到“分库分表 ... -
MySQL 日志
2017-01-11 20:58 582概述 MySQL日志记录了MySQL服务器的各种行为,My ... -
undo log与redo log原理分析
2016-12-17 21:57 815数据库通常借助日志来 ...
相关推荐
阿里Druid数据库连接池在普元平台中的配置说明 普元EOS开发平台默认数据源支持jndi、c3p0,但其性能较差,改用阿里巴巴Druid数据库连接池可以提高性能。下面是配置阿里Druid数据库连接池的步骤和说明: 1. 通过 ...
Druid是一个流行的Java数据库连接池实现,由阿里巴巴开发并开源。它不仅提供了数据库连接池的功能,还包含了监控、SQL解析、日志等附加特性。Druid 1.1.21是这个库的一个稳定版本,包含了一些性能优化和bug修复。 1...
Java Druid 是一个强大的数据库连接池组件,由阿里巴巴开发并开源,它在性能、监控和扩展性方面表现出色。Druid 提供了丰富的监控统计功能,同时支持 SQL 解析和 SQL 防火墙,旨在提高数据库连接管理和使用的效率与...
Druid的核心设计理念是监控和诊断,它不仅提供了一个优秀的数据库连接管理功能,还具备丰富的监控统计功能,为系统性能优化提供了强有力的支持。 1. **Druid的基本功能**: - 连接池管理:Druid能够有效地管理和...
配置德鲁伊连接池的核心在于定义一个数据源(`DataSource`)。下面是一个典型的德鲁伊数据源配置示例,使用了Spring框架的XML配置方式: 1. **基础配置**: - `url`: 数据库URL。 - `username`: 数据库用户名。 ...
在本文中,我们将深入探讨如何在SpringBoot项目中整合JDBC和Druid数据源,并创建一个具有监控功能的示例。SpringBoot以其简洁的配置和快速的开发能力,深受Java开发者喜爱。而Druid作为一款优秀的数据库连接池,提供...
这样,MyBatis就能利用Druid连接池进行高效的数据库操作。配置合理的连接池参数可以显著提升应用性能,减少数据库系统的压力。同时,Druid还提供了丰富的监控统计功能,便于开发者分析和优化数据库连接使用情况。在...
Druid是阿里巴巴开源的一个高性能、全面的数据库连接池,它不仅提供了监控、日志等功能,还具有优秀的性能。同样,你需要先在项目的`pom.xml`文件中引入Druid依赖: ```xml <groupId>com.alibaba</groupId> ...