我们的数据访问量很大,服务器是tomcat,web工程用了ssh框架,数据库访问用了c3p0连接池。为什么每天早上都会无法访问,就连在服务器本地访问http://localhost:8080/都无法成功,即使重起tomcat也没用,必须要重起服务器。白天基本没什么问题,就过了一夜到第二天早上就出这个问题了。
    开始以为跟tomcat日志文件太大有关,我设置了tomcat,不把日志信息添加到日志文件中,文件已经不会增大了,但是还是有那个问题。
    想着可能是session有问题,但是连服务器本地访问http://localhost:8080/都无法成功。重起tomcat也没用……
    实在无招了,求高手帮忙!!!会不会是我们的web工程出错了。
    如果谁帮忙解决了兄弟送上300分,只能发100分的贴,这里先贴100分,解决了再送200分!

解决方案 »

  1.   

    应该是配置文件的问题 hibernate相关的
      

  2.   

    不知道,很奇怪的,白天没事,到晚上估计没人浏览了,第二天早上就出现这个问题了,以前查看日志是无法成功建立连接到数据库服务器的网络。我以为是数据库死了或tomcat所在的服务器掉线了,我就在本地访问http://localhost:8080/,居然失败,所以就不知道为什么……找了3天资料了,找不到啊,郁闷死
      

  3.   

    重启tomcat和数据库都无法解决,只能通过重启服务器来恢复没道理吧,是不是像1楼所说的,开了什么进程啊,出问题后好好查查吧
      

  4.   

    根据你的描述 总感觉像是 服务器的资源上的问题  我们用的was 遇到过 几次 早上到单位 无法访问的 后来 分析 是由于 晚上 12点定时备份以及Lucene生成目录文件的时候 造成的 资源问题 导致服务down掉了
      

  5.   

    建议使用proxool吧,我以前搞的一个网站用的C3P0,一分钟一宕,我当时都快崩溃了,具体原因是C3P0的数据库资源根本不释放,最后的解决方法是在hibernate中引入spring把问题给解决了,proxool有在线监控的servlet,可以及时发现问题,C3P0按网上的配置搞下来,在大并发量的时候确实会有问题,到现在我也不知道怎么解决.
      

  6.   

    你的描述 总感觉像是 服务器的资源上的问题,我们用的was 遇到过 几次 早上到单位 无法访问的 后来 分析 是由于 晚上 12点定时备份以及Lucene生成目录文件的时候 造成的 资源问题 ,开启了什么进程把服务器挤死了,导致服务down掉了。建议使用proxool吧,我以前搞的一个网站用的C3P0,一分钟一宕,我当时都快崩溃了,具体原因是C3P0的数据库资源根本不释放,最后的解决方法是在hibernate中引入spring把问题给解决了,proxool有在线监控的servlet,可以及时发现问题,C3P0按网上的配置搞下来,在大并发量的时候确实会有问题,到现在我也不知道怎么解决.你把数据库备份的功能屏蔽掉 过一晚上看看,因为你白天都正常 肯定是晚上执行一些任务的时候 由于失败或者其他原因反复执行 所以服务器挂了,也不知道行不行,试试了。
    希望对你有帮助
      

  7.   

    另外,这个也需要看日志的,网站访问量大,tomcat运行的JVM太小,也会有这样的问题,监测一下JVM的大小变化,我的监测代码如下:
    <%
    int mb = 1024*1024;
    Runtime runtime = Runtime.getRuntime();
    response.getWriter().write("Free Memory:" + runtime.freeMemory() / mb+"M<br/>");
    response.getWriter().write("Total Memory:" + runtime.totalMemory() / mb+"M<br/>");
    response.getWriter().write("Max Memory:" + runtime.maxMemory() / mb+"M<br/>");
    response.getWriter().write("availableProcessors:" + runtime.availableProcessors());
    %>
      

  8.   

    1、我觉得应该从这里入手,楼主查看一下Tomcat日志记录,看看什么原因导致无法正常启动,查看到底是你的web工程的原因还是端口被占用了?而不是简单的重启服务器了事。
    2.你的工程数据量访问很大,你试试修改tomcat的JVM参数,把JVM参数设置大一点看看。以前我也碰到过油一个web系统周期性的死掉,后来改了JVM参数后就正常了。
      

  9.   

    你可以写个定时任务,每隔半个小时或者一个小时去访问你的web工程
    看看第二天你的工程是否还运行正常
      

  10.   

    ===========================================如果在本地localhost:8080都访问不了的话,如果tomcat正常启动 8080端口正常监听的话那唯一的可能就是数据库连接有问题。============================================可能是你的数据库备份代码问题~~~~~~~~~你备份数据库连接的是哪个数据库 和程序用的是同一个数据库连接么???????????如果用的同一个连接应该不行 
      

  11.   

    这个是c3p0配置,帮忙看看。另外14楼的应该可能性最大吧,目前我查看了tomcat占用的内存。在10:46的时候我查了一次,当时占用217.676M,12:40查了一次,占用226.092M,等下再查查看。谢谢大家了……
    [code=XM]
    <?xml version='1.0' encoding='UTF-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
            "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration> <session-factory>

    <!-- 
    <property name="connection.url">jdbc:firebirdsql:60.161.53.54:pim</property>
    <property name="connection.url">jdbc:firebirdsql:localhost:d:/test.fdb</property>
    <property name="connection.url">jdbc:firebirdsql:fbsvn.vicp.net:pim</property>
     --> <!-- 数据库连接  -->
    <property name="hibernate.dialect">org.hibernate.dialect.FirebirdDialect</property>
    <property name="connection.driver_class">org.firebirdsql.jdbc.FBDriver</property>
    <property name="connection.url">jdbc:firebirdsql:10.106.115.4/3050:pim</property>
    <property name="connection.username">SYSDBA</property>
    <property name="connection.password">masterkey</property> <!-- 配置连接池 -->
    <property name="c3p0.acquire_increment">1</property>
    <property name="c3p0.idle_test_period">100</property> <!-- seconds -->
    <property name="c3p0.max_size">2</property>
    <property name="c3p0.max_statements">0</property>
    <property name="c3p0.min_size">1</property>
    <property name="c3p0.timeout">1800</property> <!-- seconds -->
    <property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>

    <!-- 其他 -->
    <property name="show_sql">true</property>
    <property name="format_sql">true</property>
    <property name="current_session_context_class">thread</property> <!-- 二级缓  -->
    <property name="hibernate.cache.use_second_level_cache">true</property>
    <property name="hibernate.cache.use_query_cache">true</property>
    <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
    <property name="hibernate.generate_statistics">true</property>

    </session-factory></hibernate-configuration>
    [/code]
      

  12.   

    [code=XM]
    <?xml version='1.0' encoding='UTF-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
            "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration> <session-factory>
    <!-- 数据库连接  -->
    <property name="hibernate.dialect">org.hibernate.dialect.FirebirdDialect</property>
    <property name="connection.driver_class">org.firebirdsql.jdbc.FBDriver</property>
    <property name="connection.url">jdbc:firebirdsql:10.106.115.4/3050:pim</property>
    <property name="connection.username">SYSDBA</property>
    <property name="connection.password">masterkey</property> <!-- 配置连接池 -->
    <property name="c3p0.acquire_increment">1</property>
    <property name="c3p0.idle_test_period">100</property> <!-- seconds -->
    <property name="c3p0.max_size">2</property>
    <property name="c3p0.max_statements">0</property>
    <property name="c3p0.min_size">1</property>
    <property name="c3p0.timeout">1800</property> <!-- seconds -->
    <property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>

    <!-- 其他 -->
    <property name="show_sql">true</property>
    <property name="format_sql">true</property>
    <property name="current_session_context_class">thread</property> <!-- 二级缓  -->
    <property name="hibernate.cache.use_second_level_cache">true</property>
    <property name="hibernate.cache.use_query_cache">true</property>
    <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
    <property name="hibernate.generate_statistics">true</property>

    </session-factory></hibernate-configuration>
    [/code]
      

  13.   

    数据库没崩,我们有两个系统,一个web版,一个cs版,用的是同样的数据库,同样的存储过程。hibernate基本没用,都是存储过程……cs一直能用,我用数据库访问工具访问,数据库是好的,就是web有问题,郁闷ing
      

  14.   

    看好LZ的描述出现问题的时候 连 http://localhost:8080 都不能访问 也就是连 tomcat的管理页面都无法访问  这个页面跟数据库貌似没什么必然联系个人认为还是跟本地资源有关,至于为什么产生还需要详细的跟踪分析了
      

  15.   

    ssh本身不能解决数据访问量大的问题你要针对的是要解决尽量少直接去取数据库的内容
    比如对最常用的数据采用缓存的设置
      

  16.   

    是你的应用不行了还是整个服务器都不行了?抓服务器的vmstat,iostat数据,用cronjob每1小时抓一次写到日志文件中,先确定是你的应用问题还是服务器整个都被撑爆了如果是你的应用问题,再专门抓你的应用吃的内存,CPU情况,一层层分析不要着急,性能调优是一种艺术
      

  17.   

    LZ,根据你问题的描述,个人猜想,应该是跟c3p0有关。我看你的配置,连接池最多只装了两个连接对象。你们的数据访问量到底有多大我不知道,不过两个连接对象好像少了点吧,连接池里没有可用的连接对象或者新需要的连接对象不在连接池中,服务器势必要发送连接请求。还有,很可能你们的工程没有关闭连接对象。这些都只是猜想,提供个思路而已。
      

  18.   

    有新发现,大家来帮忙啊,555
    昨天晚上我测试了,因为我想找到根本原因,我把web工程的访问url改了,不让其他人来访问。结果今天早上起来,还是出那个错误,我查看日志,没有其他人访问过。再详细补充一下错误的描述:
    现在感觉就是只要一段时间内没人动,就会出现tomcat死掉的情况。
    另外,我们用的数据库是firebird,每次tomcat死掉的时候我用数据库的可执行工具去连接数据库都会提示系统缓冲区空间不足或队列已满、无法执行套接字操作。
    我们的数据库在一个服务器上,web在一个服务器上,cs在一个服务器上。tomcat死掉后数据库和cs都能正常运行。求高手帮忙啊~~~
      

  19.   

    另外,我们用的数据库是firebird,每次tomcat死掉的时候我用数据库的可执行工具去连接数据库都会提示系统缓冲区空间不足或队列已满、无法执行套接字操作。
    我们的数据库在一个服务器上,web在一个服务器上,cs在一个服务器上。tomcat死掉后数据库和cs都能正常运行。从你这里看,是应用没有释放数据库连接
      

  20.   

    我全程地检查了一遍,我们用的是ssh框架和c3p0连接池,每个查询数据库的地方都已经显式地关闭了连接。而且好像如果一直都在访问就不会死……
      

  21.   

    呵呵,看开始的回复就知道主要不是c3p0本身的问题,这个链接池我用了好几年了,很多中型系统也都用过,没出现过问题,并且hibernate也推荐使用那个这种连接池。从你后来的分析来看,是db的问题无疑,或者或是链接池与db配合的问题,我一般c3p0的配置如下:<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
               <property name="driverClass">
                     <value>com.ibm.db2.jcc.DB2Driver</value>
                </property>
               <property name="jdbcUrl">
                     <ref bean="jdbcUrl"></ref>
               </property>
               <property name="user">
                     <ref bean="dbUser"></ref>
               </property>
               <property name="password">
                     <ref bean="dbPassword"></ref>
               </property>
               <property name="maxIdleTime" value="180"/>
           <property name="maxPoolSize" value="50"/>
          </bean>你增加maxIdleTime这个配置看看,单位是秒
      

  22.   

    你可以看下数据库的活跃连接数啥的是不是满了,还有一个可能,是不是PermGen space空间给的不够,导致内存溢出了~
      

  23.   

    没有做什么操作Tomcat都能死掉
    环境问题可能性比较大
    更新一下Tomcat和JDK版本
      

  24.   

    彻底无招了,除了换tomcat,以上各种办法我都试过了,还是那个错误还是那个问题,我要疯掉了
      

  25.   

    请问访问http://localhost:8080/ 返回结果是什么
      

  26.   

    如果无法访问,那就是tomcat启动失败了
      

  27.   

    tomcat启动失败可以看看启动过程中的日志,里是否有错误的
      

  28.   

    tomcat 启动日志贴出来看看
      

  29.   

    tomcat的日志暂时拿不到,日志中的错误是无法连接数据库,不能完成到数据库服务器的连接。
    另外,tomcat是启动好的,可能我问题描述的不够清晰。就是在我访问web工程后,如果我长时间不动也不关网页,那么会出现tomcat所在服务器出现如下问题:
    访问http://localhost:8080/无效。显示浏览器不能打开该网页。
    访问web工程无效。显示浏览器不能打开该网页。
    用数据库连接操作工具去连接数据库提示系统缓冲区空间不足或队列已满,无法执行套接字操作。注:tomcat所在服务器、数据库服务器、cs版服务器分别是不同的服务器,在tomcat死掉时,数据库服务器好cs版服务器是可以正常运行的。目前已做过如下测试:增加tomcat的jvm内存、修改web工程的c3p0连接池、通查了所有查询数据的地方(数据库连接都已关闭),以上方法都没解决。再注:如果我访问了web工程且一直操作,不管查询了多少数据,用了多少次不同的查询,基本都不会出现上述情况。但是在不动也不关闭网页的情况下,一段时间后出现上述情况(这个时间暂时没能确切知道,有次是2小时)。
      

  30.   

    只知道web所在服务器是window server 2003
      

  31.   

    用netstat -ano查看一下端口使用情况,在网上搜搜netstat的解释
      

  32.   

    给windows服务器打打补丁,装个防火墙~~~
      

  33.   

    以前也遇到过相似的情况,不过我的是因为使用mysql数据库,他有个默认8小时不进行任何数据库连接操作,会断开数据库和应用的连接
    关注中,期待解决后把解决方法分享下吧
      

  34.   

    楼主你使用的是mysql 数据库???我们之前碰到过类似的情况,是因为mysql数据库连接超过8小时的问题因为我们使用的dbcp ,增加如下参数到数据库连接池中就行了
    dbcp.testWhileIdle=true
    dbcp.minEvictableIdleTimeMillis=3600000
    dbcp.timeBetweenEvictionRunsMillis=3600000你的c3p0 ,可以参看。
      

  35.   

    大家,有新发现,我查看服务器中的服务,发现下面三项,但是在网上找不到资料,请知道的哥们指点一下:
    tomcatr
    tomcatn
    tomcatsx.dll
    这些是什么东东?找不到资料了……现在把这三个服务停掉,暂时没出现那种郁闷的情况了,但是还是不敢确定是否真正的原因就是这三个服务,还得继续跟踪。