请问各位大大,为什么我部署的一个项目经常莫名的死掉?

aorons 2008-05-26 12:12:08
用spring+struts+hibernate写的。。

http://localhost:8080/user.do?action=memberlist

这个是查询会员列表的。

刷新多次后(按控制台显示hibernate的show_sql显示,查询8次后就再次刷新,那个页面就定定停在那里,IE的滚动条停在20%左右,前进不了···)。

其他需要查询数据库的页面也访问不了,写入也不行。。。

但是在tomcat的manager页面reload该项目后,又可以访问了。但在一个页面不停的刷新8次后,有出现同样的情况,请问这是怎么回事啊?

这个现象只在tomcat里出现。。
使用php查询数据库却没有问题!!!phpmyadmin vbb论坛 这些程序可以照常使用。
使用cmd 查询 SELECT * from user;
也可以查询出数据,就在项目里访问有关查询页面都会定定停在那里,IE的滚动条停在20%左右,前进不了。。

tomcat 5.5
数据库是 mysql 5.0

Spring的数据库配置段。。

<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName"
value="org.gjt.mm.mysql.Driver">
</property>
<property name="url"
value="jdbc:mysql://localhost:3306/blog?characterEncoding=utf-8">
</property>
<property name="username" value="root"> </property>
<property name="password" value="mysqladmin"> </property>
</bean>

我以为是连接次数过多又没关闭数据库连接照成的。。
可是我在spring的datasource中已经设置 destroy-method="close"

我以为这个不起作用,又在查询完后关闭session!!!
为什么还是这样啊???
在tomcat的后台中显示,sessions只有2个。。。。

如果那个页面还在访问中,滚动条也上不去的话。
在Eclipse中重启tomcat的话,就提示以下错误~~
还在访问那个页面,半天也进不去,结果重载了,马上就提示以下错误~~~~~

2008-5-17 23:33:55 org.apache.catalina.core.ApplicationContext log
信息: HTMLManager: restart: Reloading web application at '/Blog'
2008-5-17 23:33:55 org.apache.catalina.core.StandardContext reload
信息: Reloading this Context has started
2008-5-17 23:33:55 org.apache.catalina.core.StandardWrapper unload
信息: Waiting for 3 instance(s) to be deallocated
2008-5-17 23:33:56 org.apache.catalina.core.StandardWrapper unload
信息: Waiting for 3 instance(s) to be deallocated
2008-5-17 23:33:57 org.apache.catalina.core.StandardWrapper unload
信息: Waiting for 3 instance(s) to be deallocated
java.lang.NullPointerException
at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:788)
at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:96)
at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:81)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:417)
at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:144)
at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:105)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1561)
at org.hibernate.loader.Loader.doQuery(Loader.java:661)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
at org.hibernate.loader.Loader.doList(Loader.java:2145)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029)
at org.hibernate.loader.Loader.list(Loader.java:2024)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:375)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:308)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:153)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1106)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
at org.aorons.blog.dao.impl.IUserDAOImpl.QueryAll(IUserDAOImpl.java:21)
at org.aorons.blog.struts.action.UserAction.memberlist(UserAction.java:44)
...............
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.aorons.blog.Filter.EncodingFilter.doFilter(EncodingFilter.java:22)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Unknown Source)
log4j:WARN No appenders could be found for logger (org.apache.commons.digester.Digester.sax).
log4j:WARN Please initialize the log4j system properly.
...全文
145 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
aorons 2008-05-27
  • 打赏
  • 举报
回复
问题是可以查询,但查询8次后,整个java连接数据库的页面就死掉。。
php的却可以访问数据库。
APOLLO_TS 2008-05-26
  • 打赏
  • 举报
回复
都是夜猫子,帮你顶顶!

SSH没整过。

不过有过这样的情况,MYSQL默认连接好像是15个;当时采用了JS将页面放大和重刷新解决的。原来公司代码都保密,整不出来,只知道方案。

将数据放置在FORM载体中而非SESSION,CONTEXT之类的容器中。







老紫竹 2008-05-26
  • 打赏
  • 举报
回复
我在applicationcontext.xml里已经自动关闭连接了。

你误解了,那个是当Datasource被销毁时才调用的,不是自动关闭连接。


至于你的那个close(), 我搞不懂,我只看结果。
a1405 2008-05-26
  • 打赏
  • 举报
回复
你关的是你用的那个吗?
aorons 2008-05-26
  • 打赏
  • 举报
回复
而且已经用了super.getsession.close 不是已经关了么?
aorons 2008-05-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 java2000_net 的回复:]
java.lang.NullPointerException
at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:788)

以及
at org.aorons.blog.dao.impl.IUserDAOImpl.QueryAll(IUserDAOImpl.java:21)
看,你的
IUserDAOImpl.java 的第21行有问题,那个是不是一个获得数据库连接的代码啊

我才你的程序有如下问题
1 数据源的最大连接数只有10吧,太小了,放的大一点,比如50
2 检查你的代…
[/Quote]

谢谢各位大大的回答,这个是17~24行的代码。

public List QueryAll() throws Exception {
List all = null;
String hql = "FROM User as u";
Query q = super.getSession().createQuery(hql);
all = q.list();
super.getSession().close();
return all;
}

21行的代码是all = q.list();
我在applicationcontext.xml里已经自动关闭连接了。
在action中也关闭session了为什么会出现这样的问题?
yingtju 2008-05-26
  • 打赏
  • 举报
回复
代码里close connection
nanjg 2008-05-26
  • 打赏
  • 举报
回复
可以找来一些 监控jdbc连接释放的软件帮你分析
M_song 2008-05-26
  • 打赏
  • 举报
回复
数据库连接池没有释放吧.
sea_way 2008-05-26
  • 打赏
  • 举报
回复
你的hibernate session用法不对。而session是自动管理的不用你关。
如果你用spring的话可以这样获取session
getHibernateTemplate().getSessionFactory().openSession();
注意,用完不要关。
aorons 2008-05-26
  • 打赏
  • 举报
回复
55555555555555~~~怎么解决?
老紫竹 2008-05-26
  • 打赏
  • 举报
回复
java.lang.NullPointerException
at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:788)

以及
at org.aorons.blog.dao.impl.IUserDAOImpl.QueryAll(IUserDAOImpl.java:21)
看,你的
IUserDAOImpl.java 的第21行有问题,那个是不是一个获得数据库连接的代码啊

我才你的程序有如下问题
1 数据源的最大连接数只有10吧,太小了,放的大一点,比如50
2 检查你的代码,是不是只获取了连接,而没有close链接,造成连接的泄漏
3 是不是有数据库死锁问题

问题2和3都可以通过查看数据路的活跃连接数确定。
2的可能性最大
humman7 2008-05-26
  • 打赏
  • 举报
回复
数据库连接关闭方法可能不对
ayangtutu 2008-05-26
  • 打赏
  • 举报
回复
缓存清除没 session关闭没

67,538

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧