【異常】碰到的兩個連續出現的異常

背景

        在測試環境的系統,一個功能突然無法使用了,於是開始翻找日誌,加上做實時的測試,在日誌中發現瞭如下的錯誤:

Invalid use of BasicClientConnManager: connection still allocated  

    然後下面的信息略過,在網上查了查,發現是http連接出現的問題,多發生於rest調用還有httpclient接收請求時候的連接沒有釋放,所以,我決定在本地調試一下httputil,看看裏面是不是有其他的問題導致了這個錯誤的發生。

連接:https://blog.csdn.net/earthhour/article/details/43406409

        然而,當我在本地用debug方式啓動了之後,在調用的時候卻又出現了另外一個問題:

java.lang.NoClassDefFoundError

    然後在網上查了查,發現其原因更加的離譜,爲java虛擬機在運行的時候不能找到合適的類,然後出現了無法繼續運行的問題,因爲之前沒有遇到過,所以一頭霧水,但是是因爲找不到合適的類,所以我在webroot下面找到了lib文件夾,然後查看引入的jar包,發現了之前做實驗的時候有沒有刪除的版本的jar包:


由於發送http請求的工具jar包重複了,所以在編輯後可能出現找不到正確jar包的時候。

由於原來用的是舊版本的jar包,所以把新版本的jar包刪除之後,兩個錯誤就同時消失了。


詢因

        因爲在做實驗的時候,添加完成jar包之後,在debug下並沒有出現此錯誤,所以我就忽略了重複功能jar包的依賴不可能性,因爲在編譯的時候也沒有出現異常情況,所以覺得根本沒有問題。但是在運行時候就出現了貓膩。

詳細查詢之後發現瞭如下的文章:https://www.cnblogs.com/xyhz0310/p/6803950.html

然後瞭解了其實還有一種異常是:ClassNotFoundException

看似和上述的第二個錯誤一樣,但是差別是很大的,

    1、NoClassDefFoundError是在編譯完成之後,運行中java虛擬機在classpath下沒有找到需要的類名的時候包的錯。

    2、ClassNotFoundException是在編譯時候,我們的編譯器沒有在classpath中發現需要的類名包的錯。


發現


        由於第一個問題沒有真正發現根源,就解決了,所以在網上找了一下原因,也做了一下猜測————

   1、由於功能jar包有重複,所以可能在建立http連接的時候創建用的是一個jar包的類方法,釋放的時候可能用的是另外一個jar包的方法,由於沒有釋放乾淨(版本問題),所以就出錯了。

   2、可能由於併發的請求有點多造成引用或者調用jar包的問題。

   3、可能和jvm對於jar包的加載機制和類的加載機制有關,加載了新的jar包,而調用jar包的方式都是適用於舊版的。

看了看jvm的類加載機制,感覺受益匪淺,雖然沒有瞭解到想要解決的問題。

http://www.importnew.com/18548.html

發佈了209 篇原創文章 · 獲贊 186 · 訪問量 60萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章