gpt4 book ai didi

java - 如何在 Java Web 应用程序中找到无限循环?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:14:27 24 4
gpt4 key购买 nike

有一天,我们的 Java Web 应用程序的 CPU 使用率达到 100%。重新启动解决了事件但没有解决问题,因为几个小时后问题又回来了。我们怀疑新版本引入了无限循环,但我们没有对代码或服务器进行任何更改。

我们通过使用 kill -QUIT 制作多个线程转储并查看和比较每个线程的详细信息,设法找到了问题。我们发现一个线程调用堆栈出现在所有线程转储中。经过分析,对于数据库中定期更新的一些数据,存在一个永远不会出错的while循环条件。

Web应用的几个thread dump的分析真的很繁琐。

那么您知道在生产环境中发现此类问题的更好方法或工具吗?

最佳答案

经过一番查询,我在Monitoring and Managing Java SE 6 Platform Applications找到了答案。 :

您可以使用 JDK 提供的名为 JTop 的工具诊断循环线程,该工具将显示每个线程使用的 CPU 时间:enter image description here

使用线程名称,您可以通过使用 kill -QUIT 制作线程转储,在“线程”选项卡中找到该线程的堆栈跟踪。

您现在可以专注于导致无限循环的代码。

PS.: 好像可以根据https://blog.stackoverflow.com/2008/07/stack-overflow-private-beta-begins/回答我自己的问题:[…]“是的,如果您比其他任何人都找到好的答案,那么回答您自己的问题是可以的,甚至鼓励您。”[…]

PS.: 如果 sun.com 域不再存在:您可以将 JTop 作为独立的 GUI 运行:

$ <JDK>/bin/java -jar <JDK>/demo/management/JTop/JTop.jar

或者,您可以将其作为 JConsole 插件运行:

$ <JDK>/bin/jconsole -pluginpath <JDK>/demo/management/JTop/JTop.jar 

关于java - 如何在 Java Web 应用程序中找到无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5883585/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com