这个问题,可以说很复杂,很复杂。 具体情况不清楚的时候,大家给出的方法都只是暂时的。 这里,只能给出一些参考,以便楼主,自己进行判断,然后采取措施,同时也能进一步提高自己的技术。首先,确实是,connection close的问题可能是主要原因之一。 下面介绍一下,追踪失去的连接的方法。 使用,removeAbandoned参数 下面是DataSource的配置片断 <Resource name="jdbc/postgres" auth="Container" type="javax.sql.DataSource" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://192.168.xxx.xxx:5432/webdb" username="postgres" password="xxxxxx" maxActive="200" maxIdle="100" maxWait="-1" removeAbandoned=”true” removeAbandonedTimeout=”60” logAbandoned=”true”/> 在一次运行系统,会出现类似的logs信息 DBCP object created 2007-xx-xx 14:53:32 by the following code was never closed: java.lang.Exception at org.apache.tomcat.dbcp.dbcp.AbandonedTrace.setStackTrace(AbandonedTrace.java:157) at org.apache.tomcat.dbcp.dbcp.AbandonedObjectPool.borrowObject(AbandonedObjectPool.java:76) at org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:95) at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540) at jp.co.intellilink.manage.LogoutBean.doExec(LogoutBean.java:142) at org.apache.jsp.manage.logout_jsp._jspService(logout_jsp.java:21) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)……省略……这里仅仅是举例,具体如何配置你的datasource,需要楼主自己去做最后,我想说一下,web程序出现了异常,首先要学会利用一些工具去分析错误的原因,尽可能的去internet上直接查询错误, 而不是等着别人来主动帮助你,因为,在别人来看, “你的错误原因,就摆放在网络里面的某个角落里面,只是你没有发现而已”。线下联系,[email protected]
先谢谢大家,,,问题还没解决,,可能要加班了啊,连接都关了,,也是放在finally里的啊,,,
我把关闭放在了finally里面,现在tomcat的日志里已经不再报这个错误了,可是在平台里会打印出connect out 的错误,更严重的是它连不上数据库了,因为我有加判断的,然后报什么stress in use什么的,重启平台还不行,需要重启电脑才可以的,不知道是为什么呀。
我把关闭放在了finally里面,然后连续刷新,还是会报错,错误是:java.lang.ArrayIndexOutOfBoundsException: -1 at java.util.Vector.elementAt(Vector.java:435) at net.sourceforge.jtds.jdbc.TdsConnection.freeTds(TdsConnection.java:785) at net.sourceforge.jtds.jdbc.TdsStatement.close(TdsStatement.java:368) at com.apple.service.news.NewsManagerImpl.getTopNewsInfo(NewsManagerImpl.java:680)不知道是什么意思 这是方法public List getTopNewsInfo() throws Exception {
dataList = new ArrayList();
String sql = "select Top 2 * from news where ok=1 order by NewsID desc";
Statement st = null;
ResultSet rs = null;
try{ st = DBConnection.getInstance().getConnection().createStatement();
我估计99%是某个应用连接数据库后没有释放连接,导致内存溢出.
以前公司服务器也这样,现象就是不定期死tomcat,但不是死机
而且死机的时候能否去看下windows的系统日志和tomcat的日志。
建议最好过段时间就去看行系统资源的情况,尤其是内存。
还有查看一下oracle的运行状况。
把问题描述清楚了大家才能知道你的具体情况。就你那么简单的描述。没人能明白,帮不了你
这个可以通过oracle的命令来查看
select * from v$open_cursor
我现用这条语句查询出来数据写到日志里,每五分钟,跟踪一下,,大家还提一些可能性,,
只能延长死机的时间而已。
我觉得最根本的就是程序结构的问题。
尤其是db访问那块。不释放掉那些资源。
jvm本身内存的开销也是很大的,迟早会
被用完,内存益处。
多个是正常啊???请高手指点啊?
的结果能贴出来看看吗?
你去看代码,只看访问数据库的,connect有没有close,close是不是放在finally里面,不是,全部放在finally里面去close.然后99%就能好.如果只是时间延长但是还出现类似问题,说明代码还有地方遗漏.需要继续查找.
如果你们访问数据库代码不是集中在一个地方..而是分布在各个jsp里面..那么阿弥陀佛...你要加班了..
还有,tomcat配置一下连接池,连接数设大点.配置教程网上大把,就不说了
因为一旦sql有错出现异常,你不放
在finally里面的话执行不到
close()方法,也就是不能关闭连接。
所以result和connection的close()
都要写道finally里面
具体情况不清楚的时候,大家给出的方法都只是暂时的。
这里,只能给出一些参考,以便楼主,自己进行判断,然后采取措施,同时也能进一步提高自己的技术。首先,确实是,connection close的问题可能是主要原因之一。
下面介绍一下,追踪失去的连接的方法。
使用,removeAbandoned参数
下面是DataSource的配置片断
<Resource name="jdbc/postgres" auth="Container"
type="javax.sql.DataSource"
driverClassName="org.postgresql.Driver"
url="jdbc:postgresql://192.168.xxx.xxx:5432/webdb"
username="postgres" password="xxxxxx"
maxActive="200" maxIdle="100" maxWait="-1"
removeAbandoned=”true” removeAbandonedTimeout=”60”
logAbandoned=”true”/> 在一次运行系统,会出现类似的logs信息
DBCP object created 2007-xx-xx 14:53:32 by the following code was never closed:
java.lang.Exception
at org.apache.tomcat.dbcp.dbcp.AbandonedTrace.setStackTrace(AbandonedTrace.java:157)
at org.apache.tomcat.dbcp.dbcp.AbandonedObjectPool.borrowObject(AbandonedObjectPool.java:76)
at org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:95)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)
at jp.co.intellilink.manage.LogoutBean.doExec(LogoutBean.java:142)
at org.apache.jsp.manage.logout_jsp._jspService(logout_jsp.java:21)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)……省略……这里仅仅是举例,具体如何配置你的datasource,需要楼主自己去做最后,我想说一下,web程序出现了异常,首先要学会利用一些工具去分析错误的原因,尽可能的去internet上直接查询错误,
而不是等着别人来主动帮助你,因为,在别人来看,
“你的错误原因,就摆放在网络里面的某个角落里面,只是你没有发现而已”。线下联系,[email protected]
at java.util.Vector.elementAt(Vector.java:435)
at net.sourceforge.jtds.jdbc.TdsConnection.freeTds(TdsConnection.java:785)
at net.sourceforge.jtds.jdbc.TdsStatement.close(TdsStatement.java:368)
at com.apple.service.news.NewsManagerImpl.getTopNewsInfo(NewsManagerImpl.java:680)不知道是什么意思
这是方法public List getTopNewsInfo() throws Exception {
dataList = new ArrayList();
String sql = "select Top 2 * from news where ok=1 order by NewsID desc";
Statement st = null;
ResultSet rs = null;
try{
st = DBConnection.getInstance().getConnection().createStatement();
rs = st.executeQuery(sql);
while(rs.next()){
model = new NewsModel();
model.setNewsId(Integer.parseInt(rs.getString("NewsID")));
model.setFirstImageName(rs.getString("firstImageName"));
model.setTitle(rs.getString("title"));
dataList.add(model);
}
}catch(Exception e){
System.out.println(e);
}finally{
if(rs!=null){
rs.close();
}
if(st!=null){
st.close();
}
if(DBConnection.getInstance().getConnection()!=null&&!DBConnection.getInstance().getConnection().isClosed()){
DBConnection.closeConnection();
}
}
return dataList;
}
if(DBConnection.getInstance().getConnection()!=null&&!DBConnection.getInstance().getConnection().isClosed()){
DBConnection.closeConnection();
}当if 条件的代码 DBConnection.getInstance().getConnection()!=null&&!DBConnection.getInstance().getConnection().isClosed() 执行出现任何问题时,没有去执行DBConnection.closeConnection();
就抛出异常了.仔细看看这里!
UFO不会出现一个字节的内存泄漏,UFO在托管机房丢包率很高、遭受Hacker攻击、互联网 骨干网被黑等恶劣的环境条件下仍然能很好地运行;UFO在对付Hacker方面(防Hacker弄down和Hacker抓取不该访问的资源)也有足够措施。
UFO是世界上最稳定最快的支持Jsp的Web Server,用UFO做Web Server,网站可以做到一万年也不down,对于Jsp程序的各种问题,UFO的作者也会免费帮您解决。下载网址:www.gm365.com