上周应用突然出现奇怪的异常,奇怪的地方有几点
1. 应用没有做任何代码更新
2. 从数据库看到的应用连接是正常的,连接数量也不多
3. 之前很长一段时间应用没有出现过这个异常
4. 异常出现后一段时间内应用似乎无法从数据库取得数据,数据库访问出现卡死状态,但是过几分钟后又自动恢复正常
5. 重启不能解决问题
6. 同一台服务器上连同一个数据库的的另一个应用(连接池配置一样),没有出现这个问题
java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2539)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2989)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2978)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3526)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1989)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2150)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2626)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2119)
at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1362)
at org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172)
at org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172)
at com.ibatis.sqlmap.engine.execution.SqlExecutor.executeQuery(SqlExecutor.java:185)
at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.sqlExecuteQuery(MappedStatement.java:221)
at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryWithCallback(MappedStatement.java:189)
at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryForObject(MappedStatement.java:120)
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:518)
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:493)
at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForObject(SqlMapSessionImpl.java:106)
at org.springframework.orm.ibatis.SqlMapClientTemplate$1.doInSqlMapClient(SqlMapClientTemplate.java:270)
at ……
google了一些文章看了,这篇
http://hi.baidu.com/liyanjiespace/blog/item/750b1051293c5812367abe26.html文章说到服务器时间会导致这个问题,并且解决方案是修改连接池配置,让连接池每次获取连接之前检查该连接是否可用,可是我们服务器并没有修改过时间,而且我们的dbcp连接池已经配置过testOnBorrow和validationQuery,所以应该不是这个问题
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${db.driver}" />
<property name="url" value="${db.url}" />
<property name="username" value="${db.username}" />
<property name="password" value="${db.password}" />
<property name="initialSize" value="5" /> <!-- 初始连接数量 -->
<property name="maxActive" value="15" /> <!-- 最大连接数量 -->
<property name="maxIdle" value="5" /> <!-- 空闲连接数量 -->
<property name="maxWait" value="600000" /> <!-- 一个查询10分钟内没有返回,自动放弃 -->
<property name="validationQuery" value="SELECT 1" /> <!-- 数据库连接可用性测试语句 -->
<property name="testOnBorrow" value="true" /> <!-- 每次获取一个连接的时候,验证一下连接是否可用,语句在validationQuery里面 -->
<property name="removeAbandoned" value="true" /> <!-- 自动处理连接未关闭的问题,Setting this to true can recover db connections from poorly written applications which fail to close a connection. -->
<property name="removeAbandonedTimeout" value="300" /> <!-- 连接使用后5分钟未关闭,则抛弃 -->
<!-- 每5分钟检查一次,每次检查3个连接,如果连接空闲时间达到5分钟,则认为可以Evict,从连接池排除
空闲的连接是否排除对连接池似乎没有太大影响,我们只需要保证每次获取的连接都可用,所以暂时先不开启
<property name="timeBetweenEvictionRunsMillis" value="300000" />
<property name="numTestsPerEvictionRun" value="3" />
<property name="minEvictableIdleTimeMillis" value="320000" />-->
</bean>
然后想到既然另一个应用相同的配置没问题,那这两个应用的区别是什么?
引用
另一个应用是后台应用,没有用户直接使用,而出问题的这个应用是web应用,有用户使用。
会不会是系统使用者比预想的要多?原本预期是同时大概会有10个人左右,一问,现在居然有30+人。。。汗,于是将maxActive加到50,initialSize加到15,重启,问题消失,今天查了周末的log,也没有出现过这个异常,当然也有可能是连接池设置大了之后导致问题出现需要的时间更长,所以并不能肯定就是连接池不够大的问题导致的,还需要继续的观察~
记录下,以后有新情况再更新。
----
update 2011-11-08 未解决,清净了几天居然又出现了一次,等有空看看到底是什么原因。。
分享到:
相关推荐
在Python的网络编程中,`http.client.IncompleteRead: IncompleteRead(0 bytes read)` 错误通常发生在尝试读取HTTP响应时,服务器没有按预期发送完整的数据。这个错误是由于HTTP分块传输编码(Chunked Transfer ...
- **准备网络环境**:确保网络连接稳定,能够访问所需的外部资源(如DNS服务器、NTP服务器等)。 #### 三、安装步骤详解 ##### 1. 启动安装程序 - 将下载好的ISO文件挂载至虚拟或物理服务器上,并启动安装程序。 - ...
解析word(Apache Poi)、伪word(htm、mht格式)。处理报错Invalid header signature; read 0x6D78206C6D74683C, expected 0xE11AB1A1E011CFD0,博客地址:http://my.oschina.net/u/2416019/blog/699502
caffe_pb2文件,在出现TypeError: expected bytes, str found问题的时候可以考虑用来替换caffe_root/python/caffe/proto/caffe_pb2.py文件
- **Get Connection**:获取已建立的连接信息,可以指定索引或别名,如果不指定,则返回当前连接的信息。 ```robotframework ${con1} = Get Connection ``` - **Get Connections**:获取所有已打开的连接信息。 ```...
expected { before token (解决方案).md
expected ) before token (解决方案).md
expected ; before token (解决方案).md
expected } before token (解决方案).md
同时,确认打开文件的方式是流式读取,而不是直接读取到内存,避免大文件导致的问题。 4. **更新或降级POI版本**:有时,文件与POI版本之间存在不兼容性。尝试升级到最新版POI,或者如果在新版本中出现问题,降级到...
Python 3最重要的新特性大概要算是对文本和二进制数据作了更为清晰的区分。文本总是Unicode,由str...bytes([1,2,3,4,5,6,7,8,9]) bytes("python", 'ascii') # 字符串,编码 设置一个原始的字符串 >>> website = 'htt
expected unqualified-id before token (解决方案).md
expected primary-expression before token (解决方案).md
### 关于选择问题的时间界限分析 ...4. 探讨了算法的实际应用及其在不同场景下的性能表现。 总之,本文通过对选择问题的深入研究,不仅为理论计算机科学领域做出了重要贡献,也为实际应用提供了有力的支持。
解决 Linux 虚拟机虚拟网卡问题导致无法连接问题 Linux 虚拟机虚拟网卡问题是指在 Linux 虚拟机中,虚拟网卡的配置或初始化失败,导致虚拟机无法连接网络的问题。本文将对该问题进行详细的分析和解决。 问题描述 -...
在Hive on Spark作业中,如果遇到`Failed to get a spark session`,可能是因为YARN资源在某些时段紧张。一种解决方法是增加Hiveserver2中的`hive.spark.client.server.connect.timeout`参数,将其设为更长的时间,...
Python3.7 在使用pyinstaller3.4打包发布可执行文件时报错:TypeError: expected str, bytes or os.PathLike object, not NoneType pyinstall。 下载后替换项目根目录下\venv\Lib\site-packages\PyInstaller\depend\...
outputStream.write(buffer, 0, read); } outputStream.close(); } } ``` 最后,别忘了关闭输入流和输出流,以释放系统资源。完整的代码应该包含适当的异常处理,确保在出现错误时能正确清理。 总之,Java中的...
*.stub incase there is data before a script it's saved to a *.stub file *.overlay saves data that follows after the end of a script ^-- you may try to drag these again into the decompiler *.raw ...