Tomcat Web 应用程序线程转储

发布于 2024-08-22 05:24:13 字数 156 浏览 8 评论 0原文

我有一个在 Tomcat 中运行的生产 Web 应用程序(Struts、iBatis、Hibernate),该应用程序在运行 6 - 7 天后在处理请求时会挂起,但在执行线程转储后会再次正常运行。

我很难弄清楚为什么会这样。

我只是想知道其他人是否遇到过类似的事情。

I have a production web application (Struts, iBatis, Hibernate) that runs in Tomcat that would hang while serving requests after 6 - 7 days of running but would run fine again after doing a thread dump.

I have a hard time figuring out why that is the case.

I was just wondering whether anyone else has ever encountered something similar.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

却一份温柔 2024-08-29 05:24:13

也许这会帮助您找到问题的原因。

我已经在tomcat上启用了JMX
(启动 tomcat 时设置这些可选的 vm 参数)
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=30188(无论您希望 jmx 在 tc 上运行哪个端口)
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false

然后我编写了一个小应用程序来监视内存使用情况(通过 jmx),并在内存使用情况超过(例如 80%)时通知我。

一旦出现问题我就会知道。然后我将获得内存中对象的直方图(请参阅 http://java.sun.com/javase/6/docs/technotes/tools/share/jmap.html 了解如何获取它)。

最后发现我的一个 ejbQL 查询导致使用了大量内存。

希望它能以某种方式有所帮助......

Maybe this will help you find the cause of your problem.

I have enable JMX on tomcat
(set these optional vm arguments when starting tomcat)
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=30188 (whatever port you want jmx to run on for tc)
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false

I then wrote a little app that monitors memory usage (via jmx) and notifies me if the memory usage goes over , say 80%.

I would then know as soon as something is starting to go wrong. Then I will get a histogram for in-memory objects (see http://java.sun.com/javase/6/docs/technotes/tools/share/jmap.html for how to get that).

At the end it turned out that one of my ejbQL queries caused a huge amount of memory being used.

Hope it might help in some way ......

想挽留 2024-08-29 05:24:13

首先尝试在测试环境中重现这一点。您可以使用 JMeter 来对应用程序进行压力。您可以使用 -verbose:gc-XX:+PrintGCDetails 启动 tomcat,这将使您更深入地了解 GC 运行时发生的情况。然后,当站点没有响应时,您可以获取线程转储,如果这可以解除站点的阻塞,请查看 GC 详细信息以获取更多信息。

First of all try to reproduce this in a test environment. You can use JMeter to stress the app. You can start tomcat using the -verbose:gc and -XX:+PrintGCDetails which will give you more insight on what is happening while GC runs. Then, when the site is not responding, you can get a thread dump and if this unblocks the site have a look at the GC details for more info.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文