2015-08-24 43 views
0

我有运行在Glassfish上的web应用程序。有从web应用程序代码开始新的线程。我在linux上运行“top”命令,并看到glassfish.jar进程列表.. 如何识别,这是我的线程我是从代码还是本系统运行glassfish的线程?glassfish上的内存泄露

第二个问题是以下几点:

应用程序启动和20-20分钟后1-4 theads有CPU功率的20-90%(普通我已经200% - 2核心) 那么,怎样才能找到我内存泄漏,如果问题留在我的代码?

注:我无法打开我的应用程序Web界面,glassfishadmin console和其他选项。

+0

对我来说,这不是一个内存泄漏问题。也许是一个堆配置问题 –

+0

在那台机器上工作模拟应用与其他实现我的代码,我认为问题留在代码中 – user3569530

回答

0

Here您从Oracle如何设置有文档,并剖析开始在Glassfish

0

如果GlassFish实例运行的内存,它不能被通过的asadmin停止。你必须用你的os工具杀死它。 (杀/任务管理员/无论)。

要追踪内存泄漏,请考虑使用VisualVM。您可以监视您的应用程序,获取堆快照并搜索gc根。您还可以分析您的应用程序并找到热点(大部分时间花在哪里)。

但请注意:Glassfish本身就是一块内存海绵,并且不能在undeploy/redeploy上正确释放内存。要解决这些glassfish内部问题,您可以使用ContextListener来解决这个问题,并释放像下面这样的内存钩子:A ContextListener to free glassfish memory leaks

如果导致负载的线程是您的线程,请重新考虑您的设计:JEE应用程序不能启动线程。通常你可以通过使用EJB定时器来实现相同的功能(启动线程)。