我有一个浏览器游戏建立在使用jsp的java web服务器上。
我添加了一个新模块,它使用了一些http会话对象,并在其中保留了数据。然而,在它运行3-4个小时后,它突然停止工作并冻结。当我检查错误日志时,我没有看到任何异常抛出。
服务器瞬间有50-60个在线。
我使用visualVM监控服务器,这是4小时后的结果,直到它停止:

我将最大内存设置为1024Mb。正如您所看到的,它的问题与内存无关。
我注意到的是当服务器停止时,线程数量增加了。
根据截图,我应该怀疑httpsession对象吗?为什么服务器停止响应??
发布于 2016-08-12 03:44:08
这看起来像是系统限制或死锁。
你的线程图看起来有问题:活动线程的数量很重要,而且永远不会减少。web应用程序应该是无状态的。当请求到达时,活动踏步计数应该增加,但当请求完成时,活动踏步计数也会下降。
我不认为你的申请是这样的。
MGorgon是对的。
你也应该在jconsole中检查“死锁检测”。
如果您使用的是JDK 6+版本,则可以使用ThreadMXBean。它提供了findDeadlockedThreads()方法和其他有趣的方法来满足您的需求。
无论如何,如果这不是死锁,为了获得更多关于问题原因的信息,我建议您查看系统日志,无论您的操作系统是什么。你可能会有一些有趣的东西。
https://stackoverflow.com/questions/38903116
复制相似问题