我的jsp页面永远不会加载

时间:2011-05-02 06:56:00

标签: java mysql jsp

我有一个J2EE Web应用程序,它运行在服务器上的共享Tomcat上。 有时网站永远不会加载,需要大约5-10分钟!它在此期间从不加载或显示任何错误,并且在多次尝试之后,它最终显示错误:(111) connection refused。 我不知道原因是什么。谁能告诉我问题可能是什么?是我的申请还是托管公司? 顺便说一下,网站持续工作了1,2天,然后发生了上述情况。

应用程序是JSP并使用Hibernate连接到MySQL数据库。

3 个答案:

答案 0 :(得分:1)

尝试在服务器挂起时立即运行jstack命令。该命令将为您运行(或阻塞)的线程创建一个非常有用的线程转储,您可以找出导致问题的原因。

答案 1 :(得分:1)

我使用我的部署服务器观察到了非常类似的东西,但还没有机会正确地追逐它(该服务器只安装了JRE,而不是完整的JDK,并且它也非常防火墙)。通过观察日志,我知道它显然只是在(主要)webapp的初始化阶段暂停,并且在此期间没有发生任何其他事情(从观看系统日志;整个系统当时处于静止状态,没有进程可以运行)我知道只有在启动整个容器时才会发生这种情况,并且在将webapp安装到已经运行的容器中时不是

这让我猜测问题是由于Java运行时与webapp内部密集类加载之间的某种令人不快的交互。例如,如果有一个JIT数据在它真正完成之前被来自弱哈希映射的GC刷新了,那么可能会通过代码将所有内容推送到一些较慢的路径(更多)等待状态。 (我过去一直在寻找这些东西;他们很难非常难以追踪,因为如果不是最佳的话,一切都仍然正常,并且很可能是一个问题的应用程序。)

我最好的建议是

  1. 注意启动顺序(例如,在启动Tomcat之前确保数据库已启动且稳定)
  2. 不要使用动态/延迟加载的webapps(它会破坏再现性)
  3. 耐心:不要尝试访问webapp,直到它指示它已准备好(如果可以的话,锁定与Tomcat实例的连接,直到它提出其中的所有webapps为止)。

答案 2 :(得分:0)

我终于找到了问题:

public class HibernateUtil {
  private static final SessionFactory sessionFactory = buildSessionFactory();

  private static SessionFactory buildSessionFactory() {
    try {
      // Create the SessionFactory from hibernate.cfg.xml
      return new Configuration().configure().buildSessionFactory();
    } catch (Throwable ex) {
      // Make sure you log the exception, as it might be swallowed
      System.err.println("Initial SessionFactory creation failed." + ex);
      throw new ExceptionInInitializerError(ex);
    }
  }

  public static SessionFactory getSessionFactory() {
    return sessionFactory;
  }
}

正如您在上面看到的那样,getSessionFactory()方法始终会导致buildSessionFactory()所以每当我在代码中的任何位置调用hibernateUtil.getSessionFactory()时,hibernate就会与数据库建立越来越多的连接,它使数据库无响应:)