我正在使用 Java 1.7 运行 Tomcat 7.0.22 服务器,并且遇到了一个问题,即 Tomcat 在管道异常损坏后没有释放内存。
问题背景:我正在使用firefox 10.0.5生成获取请求,该请求Jersey
使用hibernate
. 该查询的结果随后会被分页,并使用 XML 或 JSON 格式的 JAXB 以编组对象的形式返回给消费者。
为了产生这个问题,我故意将页面大小设置为一个非常大的数字。根据 Visual VM,我的 tomcat 服务器使用分配给堆的 1024m 中的大约 300m 来执行查询。Firefox 最终在收到结果时核心,并且需要重新启动浏览器。查看 catalina.out 日志报告了一个损坏的管道异常。在监控堆大小和执行手动 GC 几个小时后,堆上的数据量永远不会恢复到执行查询之前的状态。
查看堆上的数据,使用可视化 vm,最重要的是一个字符数组,我相当肯定它是用 XML 构造的查询的结果。另外,我注意到为处理查询而创建的线程永远不会终止。我玩过会话超时,没有任何变化。首先,有没有人看到这个,有没有解决这个问题的方法?