【问题标题】:Java Web Server suddenly stops responding without any exceptionJava Web Server 突然停止响应,没有任何异常
【发布时间】:2016-12-18 14:11:39
【问题描述】:

我有一个使用 jsp 在 java web 服务器上构建的浏览器游戏。

我添加了一个新模块,它使用一些 http 会话对象并在其中保存数据。但是,运行 3-4 小时后,它突然停止工作并冻结。当我检查错误日志时,我没有看到任何异常抛出。

服务器瞬间有50-60人在线。

我使用 visualVM 监控服务器,这是 4 小时后的结果,直到它停止:

我将最大内存设置为 1024Mb。如您所见,它的问题不在于内存。

我注意到的是,当服务器停止时,线程数量增加了。

根据截图,我应该怀疑 httpsession 对象吗?为什么服务器停止响应??

【问题讨论】:

  • 在 jconsole 中检查“死锁检测”。
  • 在它停止响应的那一刻?

标签: java jsp servlets web-applications webserver


【解决方案1】:

这看起来像是系统限制或死锁。

您的线程图看起来有问题:活动线程的数量很重要并且永远不会减少。 Web 应用程序应该是无状态的。当请求到达时,活动步数应该会增加,但在请求完成时也会减少。
我不认为您的应用程序是这种情况。

MGorgon 是对的。

您还应该在 jconsole 中检查“死锁检测”。

如果您使用 JDK 6+ 版本,则可以使用 ThreadMXBean。它有一个findDeadlockedThreads() 方法和其他有趣的方法来满足您的需求。

无论如何,如果不是死锁,要获得有关问题原因的更多信息,我建议您查看系统日志,无论您的操作系统是什么。你可能会有一些有趣的事情。

【讨论】:

  • 感谢您的详细解答。但我无法获得“死锁检测”部分。我应该在系统运行时检查它还是应该在问题发生时立即使用它?因为当我在正常运行时尝试它时,它会显示“未检测到死锁”。
  • 不客气。有趣的主题 :) 您在 jconsole 中有按钮(在线程选项卡中),而不是在 jvisualvm 中。它们是 jdk 的同一 bin 目录中的两个不同的可执行文件。
  • 哦,我想我无法解释 :) 我已经使用了 JConsole 和“线程”选项卡中的“检测死锁”按钮 :) 我的问题是我应该什么时候应用这个?我的网站何时停止响应或何时启动?
  • 对不起,我很困惑。我删除了我之前的评论。我虽然当您的服务器冻结时您的服务器进程已终止。我读得不好。我想我会去睡觉 :) 所以,如果你的进程一直在运行,你必须在服务器似乎停止时使用“检测死锁”选项。如果它因为死锁而停止,您应该检测到一些死锁。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-12
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多