`
ni_de_yang_zi
  • 浏览: 29546 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论
阅读更多

线上resin服务跑一段时间就会抛出以下这个异常,导致服务不断重启,用的是spring+ibatis+mysql

这个问题如何解决?

数据库连接池配置:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"

destroy-method="close">

<property name="driverClassName" value="com.mysql.jdbc.Driver" />

<property name="url" value="${env.mysql.jdbc.url}" />

<property name="username" value="${env.mysql.username}" />

<property name="password" value="${env.mysql.password}" />

<property name="defaultAutoCommit" value="true"></property>

</bean>

 

Caused by: java.lang.IllegalStateException: Pool closed

        at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1132)

        at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:115)

        at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:430)

        at org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin(DataSourceTransactionManager.java:202)

        ... 50 more

 

org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction; nested exception is java.lang.IllegalStateException: Pool closed

 

异常追加:java.lang.outOfMemoryError:unable to create new native thread 

导致resin不断的重启

 

 

问题分析:

线上服务resin不断自动重启,出现了2次,异常如上,

第一次出现后分析可能有两种原因:

1.可能是程序里面线程池的数目设置过大

2.数据库最大链接数目设置不合理

所以根据以上2点做了相关优化,调小程序里面连接池的数目,将数据库最大链接数调大

优化完毕后,貌似起到了一定的效果。可是一个多月后这个问题再次重现,并且这次持续时间相当长,大约有半个小时。

痛定思痛,又根据异常分析,表面上看是线程数创建过多,导致内存溢出,没有足够的内存创建新的线程,网站上的表象就是访问超慢或者压根访问不了。

由于程序已经正常运行了半个月,先排除代码的问题。猜测是不是数据库方面的原因,随即联系dba找出当时异常时间点数据库方面的相关日志,发现在resin不断重启前,有几个sql执行的效率相当低下,达到了好几百秒,这完全已经不正常。由于执行相当慢,表被锁了,但大量的查询还在不断的涌入,大量sql直接被阻塞,数据库链接耗尽,无法创建新的链接。线程数目不断的增加,旧有线程占用内存又没释放,直到web容器的承受不了后,就开启了自动重启的保护机制。

 

解决方案:找出了那几个查询相当慢的sql。逐个进行分析,对sql进行优化,对于优化效果不大的,从业务层上进行解决(多次查询,降低占用数据库连接的时间)。

 

优化完毕后,重新部署运行,持续观察中。。。。。

分享到:
评论

相关推荐

    resin linux 重启脚本

    resin linux 重启脚本,包括进程杀死,端口检测等

    resin内存益出后自动重启

    ### Resin内存溢出后自动重启方案解析 #### 背景介绍 Resin是一款高性能、功能丰富的Java应用服务器及Web容器,广泛应用于各种企业级应用程序和服务中。它支持多种编程语言,包括Java、JSP等,并且在性能优化方面...

    Windows下Resin的配置与部署(附图).doc

    - 重启`resin.exe`服务。 - 使用新创建的管理员账户登录控制台。 #### 三、Resin中的项目部署 在Windows环境下部署项目通常涉及到IDE(集成开发环境)的设置以及Resin服务器的配置。 ##### 1. 配置MyEclipse - ...

    resin3 和 resin4

    总而言之,Resin3和Resin4作为Java应用服务器,它们在提供Servlet和JSP支持的同时,不断优化和提升自身的性能,以满足不同规模和复杂度的项目需求。通过对比分析这两个版本,开发者可以根据具体项目需求选择最适合的...

    resin服务器有3部分,resin1,resin-webapp,resin-lib,由于大小限制分开传

    Resin服务器是一款高性能的Java应用服务器,由Caucho Technology公司开发。它的设计目标是提供高效、稳定且易于管理的平台来运行Java EE应用程序。在您提到的压缩包文件中,"resin1"、"resin-webapp"和"resin-lib"这...

    resin3 resin3下载

    【Resin3】是CometD项目下的一个高性能、轻量级的Java应用服务器,它最初由Caucho Technology开发并维护。Resin3版本3.0.21是该系列的一个重要版本,提供了对Java EE 5标准的支持,包括Servlet 2.5、JSP 2.1和EJB ...

    resin常见有关问题

    这可能是由于某种错误导致Resin不断崩溃。启用调试日志可以帮助识别导致重启的原因。 1.3. java.lang.OutOfMemoryError 这是一个内存溢出问题,表明JVM的堆内存不足。解决方法包括增加JVM启动时的堆内存大小,进行...

    resin4.0 服务器 (for windows版本)

    9. **热部署**:Resin支持应用的热部署,无需重启服务器即可更新应用,减少了服务中断时间。 10. **XML处理**:Resin支持XML和Web Services,包括SOAP和RESTful API,方便集成不同系统间的通信。 下载的压缩包...

    resin安装包

    要升级Resin到新版本,只需下载新版本的安装包,按照上述步骤重新解压并覆盖原有目录,然后重启Resin。 通过以上步骤,您已成功安装并配置了Resin服务器。在实际应用中,Resin的高效性能和灵活配置将为您的Java ...

    resin服务器resin-pro-3.1.8

    - **详细的日志记录**:Resin提供了详细的日志功能,有助于问题排查和性能分析。 - **性能监控**:通过日志和Web管理界面可以实时监控服务器性能指标,如CPU、内存使用情况等。 综上所述,Resin-Pro-3.1.8作为一...

    Resin源码解读1

    分析启动日志有助于我们了解Resin的启动流程,及时发现并解决问题。总结分析启动日志,可以发现服务器启动时可能遇到的问题,如配置错误、依赖库缺失等,为故障排查提供线索。 二、运行时调试日志 运行时调试日志...

    resin-1 resin服务器有三部分

    【标题】:“resin-1 resin服务器的组件详解” 【正文】: Resin服务器是一款高效、轻量级的Java应用服务器,尤其适用于处理高并发的Web应用。它由多个核心组件构成,使得其在性能、稳定性和扩展性上具有显著优势。...

    resin-3.0.24.zip

    开发者在开发过程中,修改完Java代码后,无需手动重启服务器,Resin会自动检测到变化并重新加载新的类,极大地提高了开发效率。对于持续迭代和调试的项目来说,这是一个非常实用的功能。 2. 高性能:Resin以其高...

    使用Resin在IDE中快速启动web项目

    插件提供了快速启动、停止和重启Resin服务的功能,以及直接在IDE内部署Web应用的便利。 2. IntelliJ IDEA集成:对于IntelliJ IDEA用户,可以通过“External Tools”配置Resin的启动脚本,使其成为IDE的一部分,便于...

    resin的eclipse插件,支持resin 3.1

    1. **集成开发与调试**:通过插件,开发者可以直接在Eclipse中启动、停止、重启Resin服务器,无需离开IDE,极大地提高了开发效率。 2. **应用部署**:插件支持快速部署Java Web应用程序到Resin服务器,如WAR文件的...

    resin 入门基础教程.pdf

    - 日志记录是系统运维的重要组成部分,Resin 提供了丰富的日志配置选项,帮助开发者进行问题排查和性能分析。 #### 十、管理界面 - **Resin 管理界面** - 通过图形化界面来管理 Resin 的各项功能,包括应用部署、...

    resin3.0中的https配置

    - 将 `C:\Program Files\GnuWin32\bin\` 目录下的 `libssl32.dll` 和 `libeay32.dll` 两个文件复制到 Resin 的根目录下。 #### 四、生成 SSL 证书 1. **创建 keys 目录**: - 在 Resin 根目录下创建名为 `keys` ...

    Apache2+resin-2.1.16

    5. 重启Apache2:完成配置后,重启Apache2以应用新的配置。 6. 测试:通过访问`http://yourdomain.com/yourapp`来测试你的JSP应用是否能正常工作。 通过这样的集成,Apache2+Resin-2.1.16组合可以提供一个强大且...

    resin-3.0.22.zip

    12. **热部署**:Resin支持Web应用程序的热部署,无需重启服务器,开发者可以实时看到代码更改的效果。 综上所述,Resin 3.0.22作为一个成熟的Java应用服务器,不仅提供了丰富的功能,还具备优秀的性能和可扩展性,...

    centos下resin-2.1.17安装

    2. **重启防火墙服务:** - 使防火墙规则生效: ```bash /etc/rc.d/init.d/iptables restart ``` #### 六、设置 Resin 随系统启动 最后,为了让 Resin 能够随系统启动自动运行,需要将启动脚本复制到系统初始...

Global site tag (gtag.js) - Google Analytics