我在使用 Glassfish 3.0.1 和 Windows Server 2008 R2 Enterprise(64 位计算机)时发生内存泄漏,无论是否正在运行任何应用程序
有办法解决这个问题吗?
相同的 Glassfish 3.0.1 在 Linux 和 Windows XP SP2 上运行良好,没有任何泄漏。
我可以通过 Windows 任务管理器看到泄漏。我使用的是 Java SE 6 update 22
谢谢!
答案1
识别 Java 中内存泄漏的最佳方法是启动服务器,让其预热到正常运行水平,然后随着时间的推移进行堆转储。如果您使用的是 Sun JDK,则可以像这样触发堆转储:
jmap -dump:file=normal.hprof <pid of java process>
让服务器运行一段时间,当您看到内存开始上升时,进行另一次堆转储。
随着堆的增长,重复此过程,直到您对一组良好的数据感到满意为止。
您可以使用 jhat 分析堆转储,以查看哪些类型的对象正在填充堆。随着时间的推移,罪魁祸首将不断增加。