我有一个使用 jsp 在 Java Web 服务器上构建的浏览器游戏。
我添加了一个新模块,它使用一些 http session 对象并在其中保存数据。然而,运行3-4小时后,它突然停止工作并死机。当我检查错误日志时,我没有看到任何抛出的异常。
服务器暂时有50-60人在线。
我使用 VisualVM 监控服务器,这是 4 小时后的结果,直到它停止:
我将最大内存设置为1024Mb。正如您所看到的,它的问题与内存无关。
我注意到,当服务器停止时,线程数量会增加。
根据截图,我应该怀疑httpsession对象吗?为什么服务器停止响应?
最佳答案
这看起来像是系统限制或死锁。
您的线程图看起来有问题: Activity 线程的数量很重要并且永远不会减少。 Web 应用程序应该是无状态的。当请求到达时,生存步数应该增加,但当请求完成时,生存步数应该减少。
我不认为您的申请是这种情况。
MGorgon 是对的。
You should also check "Deadlock detection" in jconsole.
如果您使用 JDK 6+ 版本,则可以使用 ThreadMXBean 。它有一个 findDeadlockedThreads()
方法和其他有趣的方法来满足您的需求。
无论如何,如果不是死锁,为了获取有关问题原因的更多信息,我建议您查看系统日志,无论您的操作系统是什么。你也许会有有趣的事情。
关于Java Web Server 突然停止响应,没有任何异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38903116/