2015-08-24 37 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定時器來實現相同的功能(啓動線程)。