web项目运行过程中的疑惑,服务器运行时间一长就会出现保存数据出现奇怪的异常

杨某某 发布于 2013/06/03 12:53
阅读 23K+
收藏 0

这问题困扰很久了,以前只是一两月发生一次就没在意,每次重启tomcat就很正常了。但是现在是基本上坚持不了一天就需要重启tomcat就要重启,否则出现的问题简直不可理喻,比如提交表单数据到action,比如hibernate级联取值,这些都会报空指针异常,而这些都实实在在的有数据提交啊,同样的代码,只是时间不同就出现不一样的结果。自己也分析了很久,从开始分析代码本身,并没有发现什么不对,再分析配置,配置还是以前那个配置,没任何变化,后来分析tomcat,因为jvm之前报了好几次内存溢出的异常,我就优化jvm,现在没报内存溢出了,但是确出现功能性异常,这些功能在我本地没有任何问题,在服务上启动tomcat之初也没问题,只是用久了会出问题,比如现在是一天不到就算久了。。。以前是一个月半个月不用理睬就没事

  每次重启tomcat都会有很多“严重”的提示信息,都提示说可能导致内存溢出。以前没有过,所以每次shutdown的时候都要很长时间才能关掉,唉现在搞得想无头苍蝇似的,有经历的朋友希望给个思路把,比死都难受额


关闭tomcat的时候出现了下面这些严重提示,只截取了部分,其他都一样了

信息: Pausing ProtocolHandler ["http-nio-8080"]
2013-6-3 0:31:04 org.apache.coyote.AbstractProtocol pause
信息: Pausing ProtocolHandler ["ajp-apr-8050"]
2013-6-3 0:31:05 org.apache.catalina.core.StandardService stopInternal
信息: Stopping service Catalina
2013-6-3 0:31:05 de.javakaffee.web.msm.MemcachedSessionService shutdown
信息: Stopping services.
2013-6-3 0:31:05 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
严重: The web application [] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
2013-6-3 0:31:05 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
严重: The web application [] appears to have started a thread named [AWT-Windows] but has failed to stop it. This is very likely to create a memory leak.
2013-6-3 0:31:05 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
严重: The web application [] appears to have started a thread named [Resource Destroyer in BasicResourcePool.close()] but has failed to stop it. This is very likely to create a memory leak.
2013-6-3 0:31:05 org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
严重: The web application [] created a ThreadLocal with key of type [com.opensymphony.xwork2.inject.ContainerImpl$10] (value [com.opensymphony.xwork2.inject.ContainerImpl$10@10d0bdc]) and a value of type [java.lang.Object[]] (value [[Ljava.lang.Object;@185a977]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak. 
2013-6-3 0:31:10 org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
严重: The web application [] created a ThreadLocal with key of type [org.springframework.core.NamedThreadLocal] (value [Transactional resources]) and a value of type [java.util.HashMap] (value [{org.hibernate.impl.SessionFactoryImpl@15ebb08=org.springframework.orm.hibernate3.SessionHolder@38f49f, com.mchange.v2.c3p0.ComboPooledDataSource [ java.beans.IntrospectionException: java.lang.reflect.InvocationTargetException [numThreadsAwaitingCheckoutDefaultUser] ]=org.springframework.jdbc.datasource.ConnectionHolder@1dc8b67}]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak. 
2013-6-3 0:31:10 org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
严重: The web application [] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@c92222]) and a value of type [org.compass.core.impl.DefaultCompassSession] (value [org.compass.core.impl.DefaultCompassSession@e00662]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak. 
2013-6-3 0:31:10 org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
严重: The web application [] created a ThreadLocal with key of type [com.opensymphony.xwork2.inject.ContainerImpl$10] (value [com.opensymphony.xwork2.inject.ContainerImpl$10@10d0bdc]) and a value of type [java.lang.Object[]] (value [[Ljava.lang.Object;@1c30f74]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak. 
2013-6-3 0:31:10 org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks

加载中
0
杨某某
杨某某
问题解决了,哎,重新检查所有代码问题出在之前同事写的一个compass上,与SSH集成的,结果代码里面compass的事物和其session结束的方式不对,没有用try语句块结束导致一旦出现异常就有compass的session没关闭,然后就是一连串的增量索引出现各种奇怪的问题,苦逼啊!!!
0
lt2008
lt2008

1、用console远程查看

2、看哪些东西是不该有的,或是占用资源多的,有没有释放


杨某某
杨某某
jconsole我一直在用,一直监控,内存使用相当正常线程数更正常,包括之前报内存溢出的时候我都发现jconsolen堆内存都很正常,但是后来了解到,我把服务的内存全都分配给了几个运行的tomcat,导致系统本身需要的线程没有住够的空间创建,所以报的内存溢出是这个,后来改了,就没问题了,目前的问题就是前半部分的描述,唉
0
_小强_
_小强_
会不会是一些代码中的隐性错误,如在一些判断处理的地方按正常情况来的值都是对的,但某些情况得到的值超出了特定的范围,造成迭代错误。
杨某某
杨某某
恩,我也怀疑过这一点,我跟踪过,但是最后被我否定了,这不是原因,前后的值都是正常赋值的,提交后也能取得,问题就出在了Spring提供的HibernateTemplate保存和更新上,举个例子,我一个父对象里面有个集合对象,通过查询出父对象的结果,就可以取得集合对象,正常情况下是可以取得的,但是出问题的时候,这个代码就会报空指针异常!!!其实数据库是值的
0
fanl1982
fanl1982

我之前碰到过一个mysql的8小时无连接的错误

杨某某
杨某某
我也是改过的,因为我之前要建索引,需要超过8小时时间,我就改了mysql的时间,弄到24小时,索引建完以后,又把时间恢复到了8小时,这个应该没影响把,我的c3p0链接有效时间是2小时,应该说在程序阶段这样的链接就应该死掉了
0
lt2008
lt2008

我不知道你的业务哈,以我以前出现过的问题分析

1、数据库连接,长时间会出问题的

2、资源请求的话,大量并发控制会出现你说的问题,假死,JMS正常,但是运行不正常

3、Tomcat版本和jdk版本,如我用t6,jdk7就会出问题。后来改用t6.5+jR6.0

4、我以前用的解决办法是,双tomcat,然后夜里3点重启一个,3点半再重启一下。

希望对你有用。

杨某某
杨某某
恩,你说的这些都有影响,我说说我的看法,我这项目运行过程中目前并发很小,jvm占用也比较低,出现假死可能性不大,我也做了4个tomcat的单台服务器的集群,听朋友说,可能是事物影响的可能性更大,最近几次关闭tomcat,时间短点都是报告个严重,时间长点就直接报异常,都是和spring和c3p0有关的异常,我就怀疑是不是这里有没什么猫腻
0
yxtwang
yxtwang
估计是链接的问题
yxtwang
yxtwang
数据连接池多少!并发数多少!主要是的问题是不是有些资源没有及时关闭,特别是数据连接。
杨某某
杨某某
数据库的链接吗
0
lxbzmy
lxbzmy
memleak,你可以在高层次上添加一些日志到控制台,然后再控制台判断访问量,根据这些参数了定位问题出现的位置。
杨某某
杨某某
嗯,谢谢啊,我就是准备调整日志级别,仔细分析下,目前我觉得可能性最大的在于spring的事物这一块,和个别代码段操作数据的时候比较耗内存
返回顶部
顶部