一个tomcat的web项目放在服务器上后tomcat运行一段时间后,某些功能会出现异常,但是之前都还很正常

一个tomcat的web项目放在服务器上后tomcat运行一段时间后,某些功能会出现奇怪的异常比如什么空指针就出来了,但是之前都还很正常,这是什么原因呢?若是功能本身有问题那么一直都会有问题啊

第1个回答  2013-06-25
常见的问题有:线程同步,内存溢出等,这些问题都不是一两次测试就能发现,需要长期或针对性的进行压力测试。把当前的日志里面的 exception 堆栈打印出来并带上源码中相应的片断(异常所指的行号附近的代码)才可能猜测出原因。本回答被网友采纳
第2个回答  2013-06-01
看具体的错误提示,来解决问题。
这样,就是空谈。
第3个回答  2013-06-01
问题还出现吗?你这边错误代码还有?可以线上聊,513842343追问

只要我重启tomcat就又正常,但是每次都这样,一天后再去执行同一个功能这功能可能又会出错,偶尔又正常,太离奇了

第4个回答  2013-06-03
哥们,你能把异常贴出来吗?这么怎么回答啊?追答

hibernate template? spring用的是2.5或者更低的版本么?


如果看你给的链接oschina里面的帖子的讨论,貌似你这个是很大数据量的业务?那你还是考虑自己写事务和JDBC吧。用spring的hibernate尤其是早期版本很容易出问题的。


而且有些时候你过分依赖java的内存回收的话,可能造成资源不足。。。


空指针异常还有可能是以下两方面:

    如果你是linux/unix系统,那么看一下运行tomcat的用户的可打开的最大文件数,这个有时候可能影响,对于服务器来说,一二百的设置是完全不够的,4000起步,改过么。

    看一下你的tomcat启动脚本,应该是catalina.sh 或者是 startup.sh 里面最后的java参数,我记得java --server 默认的jvm堆大小大概只有32mb吧?这个你搜索以下相关设置,看你服务器内存大小弄大点。太小了的话如果到后面数据太多会导致堆满而无法分配内存最后返回null。你可以试着在你程序最外层catch(Throwable t) 而不是 Exception e试一下,内存满是Error类型的,Exception是捕获不到的。

追问

spring是3.0.5,项目后期是肯定会部署到linux上去的,只是现在用win2003,你说jvm参数调优很早以前都搞定了,项目以前没什么大问题,一两月出现一次,每次重启tomcat就能搞定,就是最近版本升级一次后,出现了这样的情况,爆发的很频繁,只要服务器一出现不稳定,项目里面查询用的是jdbc没有什么影响,但是用的hibernate template保存更新就会出现各种怪问题

追答

spring 3.x 几乎都抛弃 jdbc/hibernate template的概念了。Spring 3.x 推荐的应该是直接使用hibernate orm或者 jpa 的API吧。

我曾经有试过升级老的Spring 2.5.x的项目到Spring 3.x 。尝试过了 3.x 的 core jar 加上 2.5.x 的 dao/hibernate template jar。。。反正最后一堆毛病没弄通就放弃了。

最近一个项目就彻底改用Spring 3.2了,现在 v3 中推荐的是 hibernate3 或者 hibernate4 或者 JPA 这三种,但应该是在 spring-orm 的相关jar里面支持的。你如果还在用什么 jdbcTemplate的话就证明Spring各个组件你用的版本不一致。

某些情况下这样的配置可能可以工作,但一定会出很多问题。

推荐你要么回退Spring core到 2.5.x,要么数据库方面也升级到 spring 3

追问

是啊,问题很离奇,我排查到现在,通过日志发现一个细节,当服务器不稳定的时候,我插入数据就是做一个简单的保存操作都无法保存,但是没有异常,开始怀疑spring的事物管理,没有提交事物,但是我再操作几次相同的功能,几次中还是有成功的保存数据.....

追答

还有一个就是可能服务器数据库的链接不稳定。这可能包括 (1)网络传输问题;(2)数据量太大,CPU或者IO负载过重,无法及时响应导致超时;(3)看一下你的spring配置,有没有用连接池,用的连接池是不是教学用的简易连接池(正式生产环境下,一般开源的用C3P0的连接池实现)。。。最后:如果用hibernate的话,默认会一次性把表(具体是不是100%预读我记不清了)读入WEB容器内存的。如果不进行lazy-fetch之类的细节配置,很可能会导致数据库数据越多,WEB容器本身的内存消耗也跟着变多,最终就是你那种问题越来越多的情况

追问

分析的有道理,我确实用的是c3p0,服务器目前只有一台所以不存在跨主机执行的情况,关于hibernate这里的问题,我正在分析事物和它的一些深层次的东西,这两天我再次优化了很多,虽然没解决问题,倒是把整体性能上给优化了一些,现在出现的就友好点了出现问题的时候接连出现,好的时候好像又跟没事似的间歇着出现。。。。

追答

那不还是session相关的问题嘛!!!不过你这么一说,我大概知道你们公司做什么的了哈哈!!

本回答被提问者采纳