我正在尝试在一个项目中相互协作的 2 个独立的网络应用程序的一些问题。在 X 次部署之后,我得到了臭名昭著的“java.lang.OutOfMemoryError: PermGen space”错误。
所以我一直在用 VisualVM 监控 PermGen 空间,不断地重新部署应用程序,看看发生了什么。
这里有奇怪的行为:
首先,我重新部署了第一个应用程序超过 15 次。行为与预期一致:内存图就像一个不断增加的阶梯,直到接近最大大小(67MB)。在这一点上,内存被释放并返回到初始级别。
当我重新部署第二个应用程序时也是如此。
然后我尝试同时重新部署两者(tomcat 依次执行此操作),并且梯子的“台阶”的大小更大,但行为与单个部署相同。
然后我完成了最后一个测试。我同时重新部署了两个应用程序,直到内存非常接近极限,然后我只重新部署了一个应用程序。而且.. 瞧:PermGen 错误。
所以..这里到底发生了什么?
VisualVM的示意图。前半部分(左)对应于单个部署(应用程序 1 和 2)。后半部分(右)代表我超出限制并得到错误的点。
谢谢!