有没有人有任何关于在GlassFish上debugging连接泄漏的好的提示?
我目前正在debuggingGlassFish服务器,其中包含一个偶尔有内存泄漏的应用程序,最终导致不得不重新启动服务器以释放该池(池清除仅在Glassfish 3中提供)。
当我今天debugging这些types的错误时,我通过服务器日志来看看,我可以看到我们的监控已经报告池已经增长,看看有没有什么有趣的错误或类似的问题。
有没有人有更好的方法来debugging这样的问题?
所有的应用程序都是使用注释来注入数据源的EJB / EAR。 应用程序然后使用数据源来获得连接。 当然,每一个连接都应该被程序员closures,但是我猜这里的某个人已经忘了它。
我认为跟踪内存泄漏的一个好方法是将VisualVM附加到正在运行的Java进程(本例中是一个GF实例),并查看堆转储的参考树。
我想到的另一种方式,但需要一些工作,将编写自己的连接/连接池包装和logging一个堆栈跟踪每次从池中连接,以及closures。
您可以为连接池设置“连接回收回收”选项,并且可以获取指示服务器日志中的根本原因的完整堆栈跟踪。
请参阅文档页面 – http://docs.oracle.com/cd/E19879-01/820-4335/geveg/index.html 。