簡體   English   中英

Web應用程序似乎已啟動名為[22]的線程但未能阻止它。 這很可能造成內存泄漏

[英]A web application appears to have started a thread named [22] but has failed to stop it. This is very likely to create a memory leak

我有一個Web應用程序,后端使用Servlet部署在tomcat上。 該應用程序是簡單的Java應用程序

我經常在服務器日志中看到這個錯誤:嚴重:Web應用程序似乎已經啟動了一個名為[22]但未能阻止它的線程。 這很可能造成內存泄漏。

是否有可能導致它的潛在原因?

我將使用visualvm 1.3.2並查看正在創建的線程。 一定要添加所有插件。

如果您的代碼沒有完成,您將無法控制它。

您也不知道該消息是否是紅鯡魚。 在一段時間內對代碼進行負載測試並測量發生的情況。

我最近遇到過類似的情況在下面的步驟中解決了

  1. 我接受了Thread dump。 (使用Kill -QUIT pid)
  2. 找到Runnable / Thread類表單轉儲
  3. 然后我在run方法中放入一個調試點,並在調試模式下啟動應用程序。
  4. 得到啟動My Thread的代碼,我發現它在停止應用程序時沒有停止。
  5. 引入代碼來停止AppContextListener的contextDestroyed方法中的線程(這是我的應用程序類,它擴展了ServletContextListener),因為當我停止tomcat時將調用此方法。

如果你將Thread設置為Dameon Thread它不會有幫助,你可以訪問解釋

Tomcat等待所有應用程序的線程(用戶線程不是守護程序線程)在它關閉之前停止,我想在你的情況下這個特定的線程是用戶線程,因此tomcat生成了這個錯誤。 我建議你把這個線程改成守護進程(假設這個是你的)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM