0

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

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

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

4

1 回答 1

0

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

进行线程转储非常简单:

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

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

于 2012-07-11T14:13:04.857 回答