我公司用的是tomcat6.10
下面配了5个网站,一个数据库oracle,
常死机,请高手帮忙想想办法有没有好方法跟踪,解决的思路,,
不胜感谢

解决方案 »

  1.   

    看下tomcat的日志,log文件夹下面,看看死机前报什么错.
    我估计99%是某个应用连接数据库后没有释放连接,导致内存溢出.
    以前公司服务器也这样,现象就是不定期死tomcat,但不是死机
      

  2.   

    楼主的提问不够清晰,到底是web服务器死机,还是db服务器死机。还是web和db在一个服务器上。
    而且死机的时候能否去看下windows的系统日志和tomcat的日志。
    建议最好过段时间就去看行系统资源的情况,尤其是内存。
    还有查看一下oracle的运行状况。
    把问题描述清楚了大家才能知道你的具体情况。就你那么简单的描述。没人能明白,帮不了你
      

  3.   

    oracle 里有监控sql执行情况的方法,可以看你那条sql好内存比较多,占io比较多。
      

  4.   

    WEB 死,DB正常,每次tomcat死机, 我看了DB,正常
      

  5.   

    我们用liunx系统,,,log4J也加了,,看不出有用信息
      

  6.   

    大多数死机的情况和4楼所说的一样。程序中大量的db访问的result。connect没有关闭释放。
    这个可以通过oracle的命令来查看
    select * from v$open_cursor
      

  7.   

    select   *   from   v$open_cursor
    我现用这条语句查询出来数据写到日志里,每五分钟,跟踪一下,,大家还提一些可能性,,
      

  8.   

    把jvm的内存放大一点看看。不过我估计这
    只能延长死机的时间而已。
    我觉得最根本的就是程序结构的问题。
    尤其是db访问那块。不释放掉那些资源。
    jvm本身内存的开销也是很大的,迟早会
    被用完,内存益处。
      

  9.   

    select       *       from       v$open_cursor
    多个是正常啊???请高手指点啊?
      

  10.   

    select               *               from               v$open_cursor 
    的结果能贴出来看看吗?
      

  11.   

    楼主啊,我开始就已经猜到了,99%是内存溢出.内存溢出你就去找什么地方没释放内存.对于java最可能的地方就是你没有释放数据库连接.
    你去看代码,只看访问数据库的,connect有没有close,close是不是放在finally里面,不是,全部放在finally里面去close.然后99%就能好.如果只是时间延长但是还出现类似问题,说明代码还有地方遗漏.需要继续查找.
    如果你们访问数据库代码不是集中在一个地方..而是分布在各个jsp里面..那么阿弥陀佛...你要加班了..
    还有,tomcat配置一下连接池,连接数设大点.配置教程网上大把,就不说了
      

  12.   

    我想问下sougrape那些close一定要放在finally里面吗??我的没有放,也出现过这类似的错误,日志里面也有很多报connection out的错误,我在本地连续刷的时候刷久点就能把它给刷爆了,最后出现null.我的链接全部都关闭了的,就是没有放在finally,但是我加了判断的.
      

  13.   

    放在finally后面是最安全的做法。
    因为一旦sql有错出现异常,你不放
    在finally里面的话执行不到
    close()方法,也就是不能关闭连接。
    所以result和connection的close()
    都要写道finally里面
      

  14.   

    放在finally里面是好习惯,无论try-catch里面是否抛出异常,finally里面代码一定会执行,所以连接一定会被关闭.你放在try-catch里面,有可能在你判断之前出现不可知,或者你没有考虑到的异常(这很常见),导致跳过你的close去执行catch里面语句去了,导致连接没释放,时间久了自然导致tomcat死机.
      

  15.   

    这个问题,可以说很复杂,很复杂。
    具体情况不清楚的时候,大家给出的方法都只是暂时的。
    这里,只能给出一些参考,以便楼主,自己进行判断,然后采取措施,同时也能进一步提高自己的技术。首先,确实是,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]
      

  16.   

    先谢谢大家,,,问题还没解决,,可能要加班了啊,连接都关了,,也是放在finally里的啊,,,
      

  17.   

    我把关闭放在了finally里面,现在tomcat的日志里已经不再报这个错误了,可是在平台里会打印出connect out 的错误,更严重的是它连不上数据库了,因为我有加判断的,然后报什么stress in use什么的,重启平台还不行,需要重启电脑才可以的,不知道是为什么呀。
      

  18.   

    我把关闭放在了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();
          
          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;

    }
      

  19.   

    从错误看应该是 getTopNewsInfo() 这个方法数组越界吧.仔细看代码,感觉还是有地方没有关闭连接,所以报connect out.还有可以换tomcat5.0.28试试,一直用这个蛮稳定,不过估计不是tomcat问题.你贴出来代码这里可能会有问题
    if(DBConnection.getInstance().getConnection()!=null&&!DBConnection.getInstance().getConnection().isClosed()){
                    DBConnection.closeConnection();
                }当if 条件的代码 DBConnection.getInstance().getConnection()!=null&&!DBConnection.getInstance().getConnection().isClosed() 执行出现任何问题时,没有去执行DBConnection.closeConnection();
    就抛出异常了.仔细看看这里!
      

  20.   

      tomcat本身做的并不稳定,使用tomcat出现死机是常有的现象,以前我的网站也出现过类似的情况,摸索了三四年,才达到比较稳定的状态,后来我们用了另外一套web服务器,从04年到现在没死过机。我用的是UFO,你可以down下来试用,反正是免费的。
    UFO不会出现一个字节的内存泄漏,UFO在托管机房丢包率很高、遭受Hacker攻击、互联网 骨干网被黑等恶劣的环境条件下仍然能很好地运行;UFO在对付Hacker方面(防Hacker弄down和Hacker抓取不该访问的资源)也有足够措施。
      UFO是世界上最稳定最快的支持Jsp的Web Server,用UFO做Web Server,网站可以做到一万年也不down,对于Jsp程序的各种问题,UFO的作者也会免费帮您解决。下载网址:www.gm365.com