java.lang.OutOfMemoryError: unable to create new native thread 居然是MQ問題


問題

開發環境,之前一直正常,某天突然用tomcat啟動項目后時不時報如下錯誤:

 java.lang.OutOfMemoryError: unable to create new native thread

環境介紹:

項目是用的 Eclipse+Tomcat + activeMQ

activeMQ用的本地的windows版本,黑窗口啟動。

 

具體這個錯誤的上面報出的大異常是 JMS Exception。

因為是用的 spring,所以MQ消息處理部分報錯都是先拋出 JMSException,然后往下看才是  內存溢出,不能創建本地線程。

具體顯示異常發生在 MQ接收消息的 監聽器中的:  session.createConsumer(session.createQueue(queueName))  以及 onMessage方法中。

 

嘗試解決無果

因為 onMessage方法中用了多線程處理業務邏輯,所以一開始 主觀認為是  線程創建太多導致的,於是各種百度,找到的方法都是說

虛擬機內存配置等等。結果各種配置Eclipse都無效,很是郁悶。

 

嘗試解決正確分析:

然后和其他同事比較Eclipse等環境配置,首先確保配置一樣的情況下,還是一樣有問題。

分析

出問題的部分代碼一直都未改動,之前整個辦公環境都是正常的,

現在同樣的代碼,同樣的環境配置,別人那還不出問題。

那就有可能是 和其他人不一樣的地方出的問題,想到MQ是用的自己本機的,報的錯誤也是MQ部分的,雖然是在Eclipse中報錯,但已經排除了Eclipse環境的問題,那么是不是本機的MQ有問題。

 

真正解決方法:

於是,關掉MQ,找到MQ的目錄,查看data目錄下的幾個log日志文件,發現里面果真都報錯了,於是清空data目錄下的所有東西,重新去bin目錄中啟動bat文件。

在Eclipse中重啟項目,問題解決了。

 

啟示:

1、大家說的不一定就是對的,百度說的不一定就全面准確,具體問題具體分析很重要。

2、遇到難以解決的問題,如果百度等通用方法無效,那么要回過頭仔細分析 報錯的異常提示,注意整個異常的提示,尤其是開頭部分,對提示中的多個點都進行分析嘗試往往能夠找到問題。

3、找問題還是用一步一步的逐個排除法來縮小范圍比較靠譜。【最好有明確的分析 排除 順序,先排除容易操作的】

4、除了Eclipse 和項目外,外部依賴的一些其它 小服務 也可能是產生問題的罪魁禍首。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM