- 浏览: 2652395 次
- 来自: 杭州
文章分类
- 全部博客 (1188)
- webwork (4)
- 网摘 (18)
- java (103)
- hibernate (1)
- Linux (85)
- 职业发展 (1)
- activeMQ (2)
- netty (14)
- svn (1)
- webx3 (12)
- mysql (81)
- css (1)
- HTML (6)
- apache (3)
- 测试 (2)
- javascript (1)
- 储存 (1)
- jvm (5)
- code (13)
- 多线程 (12)
- Spring (18)
- webxs (2)
- python (119)
- duitang (0)
- mongo (3)
- nosql (4)
- tomcat (4)
- memcached (20)
- 算法 (28)
- django (28)
- shell (1)
- 工作总结 (5)
- solr (42)
- beansdb (6)
- nginx (3)
- 性能 (30)
- 数据推荐 (1)
- maven (8)
- tonado (1)
- uwsgi (5)
- hessian (4)
- ibatis (3)
- Security (2)
- HTPP (1)
- gevent (6)
- 读书笔记 (1)
- Maxent (2)
- mogo (0)
- thread (3)
- 架构 (5)
- NIO (5)
- 正则 (1)
- lucene (5)
- feed (4)
- redis (17)
- TCP (6)
- test (0)
- python,code (1)
- PIL (3)
- guava (2)
- jython (4)
- httpclient (2)
- cache (3)
- signal (1)
- dubbo (7)
- HTTP (4)
- json (3)
- java socket (1)
- io (2)
- socket (22)
- hash (2)
- Cassandra (1)
- 分布式文件系统 (5)
- Dynamo (2)
- gc (8)
- scp (1)
- rsync (1)
- mecached (0)
- mongoDB (29)
- Thrift (1)
- scribe (2)
- 服务化 (3)
- 问题 (83)
- mat (1)
- classloader (2)
- javaBean (1)
- 文档集合 (27)
- 消息队列 (3)
- nginx,文档集合 (1)
- dboss (12)
- libevent (1)
- 读书 (0)
- 数学 (3)
- 流程 (0)
- HBase (34)
- 自动化测试 (1)
- ubuntu (2)
- 并发 (1)
- sping (1)
- 图形 (1)
- freemarker (1)
- jdbc (3)
- dbcp (0)
- sharding (1)
- 性能测试 (1)
- 设计模式 (2)
- unicode (1)
- OceanBase (3)
- jmagick (1)
- gunicorn (1)
- url (1)
- form (1)
- 安全 (2)
- nlp (8)
- libmemcached (1)
- 规则引擎 (1)
- awk (2)
- 服务器 (1)
- snmpd (1)
- btrace (1)
- 代码 (1)
- cygwin (1)
- mahout (3)
- 电子书 (1)
- 机器学习 (5)
- 数据挖掘 (1)
- nltk (6)
- pool (1)
- log4j (2)
- 总结 (11)
- c++ (1)
- java源代码 (1)
- ocr (1)
- 基础算法 (3)
- SA (1)
- 笔记 (1)
- ml (4)
- zokeeper (0)
- jms (1)
- zookeeper (5)
- zkclient (1)
- hadoop (13)
- mq (2)
- git (9)
- 问题,io (1)
- storm (11)
- zk (1)
- 性能优化 (2)
- example (1)
- tmux (1)
- 环境 (2)
- kyro (1)
- 日志系统 (3)
- hdfs (2)
- python_socket (2)
- date (2)
- elasticsearch (1)
- jetty (1)
- 树 (1)
- 汽车 (1)
- mdrill (1)
- 车 (1)
- 日志 (1)
- web (1)
- 编译原理 (1)
- 信息检索 (1)
- 性能,linux (1)
- spam (1)
- 序列化 (1)
- fabric (2)
- guice (1)
- disruptor (1)
- executor (1)
- logback (2)
- 开源 (1)
- 设计 (1)
- 监控 (3)
- english (1)
- 问题记录 (1)
- Bitmap (1)
- 云计算 (1)
- 问题排查 (1)
- highchat (1)
- mac (3)
- docker (1)
- jdk (1)
- 表达式 (1)
- 网络 (1)
- 时间管理 (1)
- 时间序列 (1)
- OLAP (1)
- Big Table (0)
- sql (1)
- kafka (1)
- md5 (1)
- springboot (1)
- spring security (1)
- Spring Boot (3)
- mybatis (1)
- java8 (1)
- 分布式事务 (1)
- 限流 (1)
- Shadowsocks (0)
- 2018 (1)
- 服务治理 (1)
- 设计原则 (1)
- log (0)
- perftools (1)
最新评论
-
siphlina:
课程——基于Python数据分析与机器学习案例实战教程分享网盘 ...
Python机器学习库 -
san_yun:
leibnitz 写道hi,我想知道,无论在92还是94版本, ...
hbase的行锁与多版本并发控制(MVCC) -
leibnitz:
hi,我想知道,无论在92还是94版本,更新时(如Puts)都 ...
hbase的行锁与多版本并发控制(MVCC) -
107x:
不错,谢谢!
Latent Semantic Analysis(LSA/ LSI)算法简介 -
107x:
不错,谢谢!
Python机器学习库
线上tomcat服务器报错:
现象:
应用在高峰来临的时候报大量报下面的错误。
- org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is
- org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object
- at org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:204 )
- at org.springframework.orm.ibatis.SqlMapClientTemplate.executeWithListResult(SqlMapClientTemplate.java:249 )
- at org.springframework.orm.ibatis.SqlMapClientTemplate.queryForList(SqlMapClientTemplate.java:296 )
- ...................
- Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object
- at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:114 )
- at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044 )
- at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:113 )
- at org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:190 )
- ... 33 more
- Caused by: java.util.NoSuchElementException: Timeout waiting for idle object
- at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1134 )
- at org.apache.commons.dbcp.AbandonedObjectPool.borrowObject(AbandonedObjectPool.java:79 )
- at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106 )
- ... 36 more
分析错误来源:
查看出错部分源码,发现出现这个问题出现的原因是数据库操作时超时了。
- if (maxWait > 0 && ((System.currentTimeMillis() - starttime) >= maxWait)) {
- synchronized ( this ) {
- // Make sure allocate hasn't already assigned an object
- // in a different thread or permitted a new object to be created
- if (latch.getPair() == null && !latch.mayCreate()) {
- // Remove latch from the allocation queue
- _allocationQueue.remove(latch);
- } else {
- break ;
- }
- }
- throw new NoSuchElementException( "Timeout waiting for idle object" );
- }
查看dbcp的数据源配置如下:
- <property name= "maxWait" ><value> 60000 </value></property>
- <property name="maxIdle" ><value> 14 </value></property>
超时时间为60s,而调用量top的sql响应时间平均都在2~3ms左右,所以主要时间消耗应该是出现在获取数据库连接上面。
查看出现问题时的线程情况,发现线程有个大量的增长,多出了很多个数据库调用的线程,而数据库的连接池仅有14个,而等待队列用的是一个linkedList,及无限队列,如果调用量很大,队列过长,确实会出现大量60stimeout的情况。
然后查找线程池大量增长的原因。应用中有一个对外提供的接口,调用量比较大,而且接口中需要去好几个地方取数据,所以采用了多线程的方式来提高速度,线程池的配置如下。
- executor = new ThreadPoolExecutor( 10 , 50 , 3 , TimeUnit.SECONDS,
- new ArrayBlockingQueue<Runnable>( 200 ));
- executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
corePoolSize=10
maxPoolSize=50
队列类型长度:ArrayBlockingQueue 200
reject策略:CallerRunsPolicy
首 先前10个线程都通过threadFactory.newThread(w)获取新线程来跑,当池已经到达corePoolSize,则会把任务放入到队 列中,已有线程通过获取队列中的任务来执行。当队列放满之后,再来新任务,则会继续通过threadFactory.newThread(w)获取新线程 来执行,直到池到达50(maxPoolSize)。如果这个时候还有任务过来,则会按照设置的rejectedExecutionHandler的策略 来执行(详细可查看ThreadPoolExecutor中的excute方法)。
rejectedExecutionHandler策略很简单,通过调用线程来执行。
当高并发的时候,线程池已经达到max并且队列已满,则确实会出现一个线程的大量增长。
- public static class CallerRunsPolicy implements RejectedExecutionHandler {
- public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {
- if (!e.isShutdown()) {
- r.run();
- }
- }
- }
推断:
高峰来的时候,首先的时候导致数据库调用的线程池增大,整体数据库调用的响应变慢,导致接口的多线程处理部分线程处理速度变慢,任务堆积,直到线程池和队列都满掉,直接通过工作线程来启动,导致更多线程来获取数据库连接线程,队列更长,知道最后,超过60s。
解决:
其实解决很好解决的,这个接口里面存在一个方法误用,本来这种大量调用的接口就不应该直接走数据库的,改成走缓存,问题解决。
发表评论
-
spring-cloud问题排查
2019-11-18 14:58 513### 问题1报错,应用无法启动 org.springfra ... -
log4j 和slf4j的 类冲突解决
2018-07-14 16:11 19781. 检查 log4j 和slf4j的冲突 pub ... -
HikariPool-1 - Connection is not available, request timed out after
2018-05-07 19:13 6673在开发中遇到 HikariPool-1 - Conn ... -
java.io.StreamCorruptedException: invalid stream header: EFBFBDEF
2018-05-03 16:54 2403Java代码 publi ... -
log4j问题总结-加载配置文件
2014-08-20 16:34 1063今天遇到log4j的log4j.properties没有生效 ... -
一个诡异的类冲突错误排查记录
2014-08-13 10:44 815今天遇到一个问题排查了很久,记录一下。 问题原因,日常环境 ... -
tomcat7.0.26的连接数控制bug的问题排查
2014-04-23 19:51 1709今儿线上一台机器,监控一直在告警, mtophost[CM ... -
tomcat,jboss,jetty访问出现404错误问题记录
2014-04-21 19:51 1690原因是WEB-INF下面缺少jboss-web.xml ... -
记录Hadoop native libraries无法load的问题
2014-04-10 19:45 2297今天遇到一个错误,在本地往Hadoop写文件的时候报了一个错 ... -
Exception性能问题
2014-01-24 22:25 13071.从Exception往上介绍相关结构、代码 ... -
spring加载xml去远程获取dtd验证xml的问题
2014-01-24 11:57 899最近遇到spring 加载xml去远程获取dtd,但外网不 ... -
hbase查询超时导致的错误
2013-12-25 19:53 2714今天上线跑一个hbase程序出现如下错误: org.ap ... -
hbase无法启动问题
2013-12-24 23:53 927今天遇到hbase无法启动,找了很久,才发现可能是data ... -
web.xml配置注意点
2013-12-19 20:29 6391. servlet启动初始化 servlet默认只有访 ... -
Linux服务器Cache占用过多内存导致系统内存不足问题的排查解决
2013-12-17 23:22 3909作者: 大圆那些事 | 文章可以转载,请以超链接形式标明文章 ... -
linger close用法
2013-12-13 14:18 964Linux下tcp连接断开的时候调用close()函数,有 ... -
log4j-over-slf4的log4j Loger加载问题
2013-12-11 00:19 5780log4j-over-slf4是通过定义和log4j同包名 ... -
log4j,slf4j,logback问题总结
2013-12-10 18:12 6527ls4j初始化过程参考:l ... -
maven 小结(打包和单元测试)
2013-12-04 11:53 6851. 如何把一个jar和他依赖的包打包成一个 使用mave ... -
solr load比较高
2013-12-02 09:50 1069最近solr的load比较高,通过jstack查看: 写 ...
相关推荐
在提供的堆栈跟踪中,可以看到`NoSuchElementException: Timeout waiting for idle object`异常,这通常表示线程在等待连接池中的空闲连接时超时,即没有在预设时间内获取到连接。这可能是因为: 1. **连接池大小...
确保 Web AP 不會從 Glassfish Connection Pool 取到關閉的連線 ...通过設置連線驗證、連線 timeout 和連線池大小,可以保證 Web AP 不會從 Connection Pool 中獲取關閉的連線,從而提高系統的穩定性和性能。
系统使用了codis之后,发现当并发量上来之后,会抛出异常:could not get resource from pool,更底层的原因是:Timeout waiting for idle object 修改了RoundRobinJedisPool代码将for循环内部的代码控制到原子 jar...
try (Connection conn = dataSource.getConnection()) { // 执行SQL语句 } catch (SQLException e) { e.printStackTrace(); } } ``` **五、优化策略** 1. **合理设置连接池参数**:如初始化连接数、最小空闲...
空闲超时弹出该项目是使用版本9.0.7生成的。开发服务器为开发服务器运行ng serve 。... 如果您更改任何源文件,该应用程序将自动重新加载。代码脚手架运行ng generate component component-name生成一个新的组件。...
《Python库 Django-session-idle-timeout的深度解析》 在Python的世界里,Django作为一款强大的Web框架,因其高效、易用和丰富的功能而备受开发者喜爱。而在Django的生态系统中,有一个名为`django-session-idle-...
Either IDLE can't start a subprocess or personal firewall software is blocking the connection. 错误截图: 错误原因分析: 同层目录下存在和Python库文件相同名字的.py文件,导致子进程无法创建的问题。 ...
4. 获取和释放连接:使用`dataSource.getConnection()`获取连接,完成后调用`Connection.close()`归还连接,实际不会关闭,而是放回连接池。 5. 关闭连接池:在应用关闭时,调用`dataSource.close()`关闭连接池。 ...
USB4 1.0 ECN - CL0s Exit Timeout USB4 1.0 版本的 ECN(Engineering Change Notice)文件对 CL0s 退出 timeout 进行了修改,以下是相关知识点的总结: 1. CL0s 退出 timeout 的添加:在退出 CL0s 状态时,添加了...
- Idle connection pool cleanup. We now use a timer thread to clean up dead connections from the connection pool. - Command timeout has been refactored to use network and stream timeouts instead of a ...
15. 数据库连接池异常:`Timeout waiting for idle object`提示获取数据库连接超时,可能是连接池配置不当或资源耗尽。 16. 结果集关闭:`Operation not allowed after ResultSet closed`再次强调结果集必须在正确...
修改 /etc/mysql/my.cnf文件,在 [mysqld] 节中设置: # Set a connection to wait 8hours in idle status. wait_timeout =86400 相关参数,红色部分 mysql> show variables like ‘%timeout%’; +————————...
对于Hibernate,可以通过设置`hibernate.connection.pool_size`和`hibernate.c3p0.idle_test_period`等属性来调整连接池大小和检测空闲连接的频率。 总之,MySQL的连接超时问题主要是由`wait_timeout`参数引发的,...
大家使用uiautomator dump 来获取界面元素xml后。基本都是用取文本中间或正则来分析的。这样不但效率低下,对一些特征不明显的xml元素很难取到。如果直接用xml来匹配就不存在这个问题了。并且可以基于本框架进行快速...
在.NET框架中,"App idle"(应用空闲)是一个重要的概念,特别是在处理用户界面(UI)或桌面应用程序时。这个术语通常指的是程序在一段时间内没有接收到任何用户输入或执行任何显著操作的状态。理解如何检测和管理...
在GTK中,定时器主要通过`g_timeout_add()`或`g_idle_add()`函数来实现。这两个函数都属于GLib库,而GLib是GTK的基础。`g_timeout_add()`用于设置周期性的回调函数,间隔时间由用户指定,单位为毫秒。当时间间隔过去...
Just a small tools for wing IDLE.
Python 3.10 IDLE中文版是一款专为初学者设计的集成开发环境(IDE),尤其适合对中国语言有偏好的用户。IDLE是Python自带的标准轻量级开发工具,它提供了代码编辑、编译、执行等基本功能,是学习Python语法和实践...
Python IDLE是Python的标准集成开发环境(IDE),它是一个轻量级、易上手的代码编辑器,尤其适合初学者。IDLE具有语法高亮、自动缩进、代码提示等功能,方便用户编写和调试Python代码。然而,默认情况下,IDLE的界面...
MongoDB是一种流行的开源文档数据库系统,以其灵活性、可扩展性和高性能而受到开发者的青睐。在Java应用程序中,当处理大量并发请求时,有效地管理数据库连接是至关重要的。这就是MongoDB连接池的作用,它能帮助优化...