用struts1.2+tomcat5.5+mysql5.1+c3p0连接池开发 出现死机现象

用struts1.2+tomcat5.5+mysql5.1+c3p0连接池开发 出现死机现象

各位朋友,向大家请教一下,我们用struts1.2+tomcat5.5+mysql5.1+c3p0连接池开发一个web应用网站。
现在我们遇到的问题是:现有已经开发的几个模块,部署到linux服务器上,服务器使用的tomcat5.5,运行一段时间就会出现死机的现象,不能登陆及查询(即:数据库操作无响应),刚开始我们初步判断是连接池的原因(因为我们连接池用的单例模式,之前由于考虑不全,出现了两个连接池对象),但是后面我们已经修改了连接池,只有一个连接池对象,再发布测试还是出现这个现象。我们还是不能确定问题出现在哪里, 只是怀疑连接池的问题,我们又做了修改(将c3p0 连接池修改为struts1.2的数据源配置),再次发布到服务器上测试,还是出现相同的问题。
现在我们能推断的问题原因有以下几种情况:
1.连接池问题 (不能确定,应为我们修改了两次连接池,还是出现相同的问题)
2.tomcat 死掉 (不能确定,网上查找了资料,已经修改了tomcat启动参数 设置jvm 的虚拟内存: set JAVA_OPTS=-Xms512m -Xmx512m)
3.mysql 数据库死掉 (不能确定,如果是数据库服务器死掉,但是通过mysql的客户端可以正常操作查询等一些操作)
[b]问题补充:[/b]
补充1:Connection,statement都是在应该关闭的地方关闭了的
补充2:没有使用hibernate
补充3:编译没有报错
[b]问题补充:[/b]
补充:程序能够运行一段时间,大概20分钟左右,然后才数据库操作无响应
[b]问题补充:[/b]
我们程序里有两个线程、每隔15分钟扫描一次数据库中表,同时还有用户不停的访问!!麻烦你能否给一个连接池的配置信息!谢谢!!

8个回答

这里有篇c3p0配置的
http://msq.iteye.com/blog/60387
你对照看一下你的配置有没有问题。

我想问题还是你的程序哪里出毛病了。
这就不是我隔这么远能猜出原因的。

有一个方法,就是把最大连接设成1进行测试,然后再设成2,最后设成3,这样比较容易找到原因。

我以前是要求把连接设成1,这样有连接没释放自己整几下就能发现。

建议你下载jprofiler去分析下,可以定位得比较详细的问题

多半是Connection,statement打开没有关闭
如果实在不想用hibernate的话可以用iBatis

有没有看日志呢

1你要把报错的日志信息贴出来,方面大家帮你查找问题所在.
2如果你使用的是hibernate主要原因在于session管理上.一般使用session的时候是一个请求对应的个session.Session级共享了一级缓存,一级缓存不能控制缓存的数量.如果在长时间大量的操作数据而又没有清楚缓存或关闭的话就耗大量的内存,这时候有就会出现类似与你这样的问题或内存溢出等.请查阅你的代码.
3查看你的连接池问题,你可以试着将不使用连接池是否会出现问题,加大tomcat内存在性能上能得到改善,并不能根本解决你的问题.

我所分析的希望能对你的问题有帮助.

我觉得最有可能的就是使用了连接池的连接后却没有正常关闭,导致新的请求过来,tomcat没法处理新的请求,后台就无响应,
你用jprofiler去分析下很容易就能分析出原因,就这样靠想能解决什么问题,
得去实践下看才知道

第一条你没法保证
如果你怀疑是连接池的问题,可以换成DBCP的连接池试试

tomcat是否死掉只需要在一个tomcat装两个app就可以了。
webapps下面本来就有examples,你可以访问试试

如果用其它客户端能访问,说明mysql没问题。

你这里最大的可能还是
1.连接池参数设置有问题
2.程序有问题,导致连接无法回收

那肯定是对连接池的使用有问题。连接池这么多人用,本身出问题的可能性不大,所以还是你的程序有问题。

你的意思不会是程序启动起来,你什么都不做,过20分钟就访问不了吧。
那就不一定是数据库的问题了。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问