我有一个每秒连续发送 3 个 ajax 请求的 Web 应用程序。这些 ajax 请求针对 3 个不同的 servlet。首先我的应用程序运行良好,但一段时间后它抛出java.lang.OutOfMemoryError: Java heap space
异常。我无法弄清楚这个异常的原因。我在我的服务器端 java 代码中声明了一些集合。是这些变量在堆中持续消耗的内存吗?
问问题
521 次
2 回答
2
使用-XX:+HeapDumpOnOutOfMemoryError
JVM 参数,然后在 MAT 中打开 Heap Dump。
MAT 会向您展示 OOM 的嫌疑人,您甚至可以自己遍历堆并确定哪些对象占据了堆的大部分。这样你就可以很容易地找到问题的罪魁祸首。
于 2013-06-18T04:16:07.070 回答
1
您是在 Servlet 类字段中还是在方法 processRequest 中存储您的集合?
Servlet 是“一种”单例,您的 Web 容器中的每个 Servlet 类只有一个对象,因此如果您仍将对象添加到此集合中,您显然会得到 OutOfMemory
您可以不时清除您的收藏或管理这些收藏中的对象
于 2013-06-17T15:04:41.187 回答