我有一个使用jsp在java web服务器上构建的浏览器游戏。
我添加了一个新模块,它使用一些http会话对象并在其中保存数据。然而,在运行3-4个小时后,它突然停止工作并冻结。当我检查错误日志时,我没有看到任何异常抛出。
服务器暂时在线50-60。
我使用visualVM监控服务器,这是4小时后的结果,直到停止:
我将最大内存设置为1024Mb。正如你所看到的,它的问题与记忆无关。
我注意到的是当服务器停止时,线程数量增加了。
根据截图,我应该怀疑httpsession对象吗?为什么服务器停止响应?
答案 0 :(得分:1)
它看起来像系统限制或死锁。
你的线程图看起来有问题:生命线程的数量很重要,永远不会减少。 Web应用程序应该是无状态的。当请求到达时,活动胎面数应该增加,但是当请求结束时,它们也会下降
我的印象不是你申请中的情况。
MGorgon是对的。
您还应该检查jconsole中的“死锁检测”。
如果您使用的是JDK 6+版本,则可以使用ThreadMXBean。它有findDeadlockedThreads()
方法和其他有趣的方法来满足您的需求。
无论如何,如果它不是死锁,为了获得有关问题原因的更多信息,我建议你查看系统日志,无论你是什么操作系统。你可能会有一些有趣的事情。