2012-06-29 34 views
0

我有一个运行在Apache 2.2,tomcat 6上的应用程序,它使用struts框架,hibernate框架。我们在后端使用Mysql。我们还与第三方服务器进行交互,以放置用户请求的一些请求。由于机密性限制,我无法确切地告诉你我们做了什么,但我可以向你保证我们没有定制任何东西,并且我们使用Apache,tomcat等最常用的版本。我们使用Linux平台。许多访问者访问我们的网站,他们首先使用支付网关付款,然后购买产品。要购买产品,我们必须再次访问第三方网站。它是一种简单的电子商务类型的设置。问题在于有些时候服务器挂起。因为它没有响应,当我们点击(我知道)由tomcat容器提供的链接时,它不会被加载。这里是我需要帮助的:Struts Hibernate Mysql基于Tomcat的应用程序挂起

  1. 由于我的主机是在一个无头Linux平台上,请给我一个很好的调试工具。
  2. 我们已经登录并且打印几乎所有异常(如果它们发生)的堆栈跟踪,我们总是监视catalina.out,但是当服务器挂起时,我们没有看到任何有关catalina.out的活动。可能是这可以给一些线索。
  3. 我们有show_sql禁用休眠,我们试图启用它,但仍然不足以找出如果应用程序在查询中查找。我们也启用了slow_sql日志,但没有显示任何重要的查询。我们如何检查我的应用程序是否停留在查询上?
  4. 如果我的应用程序没有停留在查询上,我怎么知道它卡在哪里?
  5. 我怎样才能得到java堆栈转储?
  6. 什么是可能的方法来解决这样的问题。

欢迎提出任何建议。我提前感谢大家阅读我的问题,并且您将花时间写出答案。

+0

投票转移到[sf]。 – eggyal

回答

0

面对你的情况当servlet容器“挂起”时,我会做线程转储。线程转储为您提供给定JVM中所有Java线程的堆栈跟踪列表。

做一个线程转储是很容易的:

  1. 查找Tomcat的进程ID,例如ps -ef | grep java
  2. 向该过程发送SIGQUIT,例如, kill -3 tomcatProcessId

您可以在TOMCAT_HOME/logs/catalina.out中找到线程转储的内容。

相关问题