記一次tomcat部署排錯經歷(jar衝突)

2022-09-22 06:18:12 字數 1412 閱讀 5263

18-feb-2022 08:32:46.836 severe [localhost-startstop-1] org.apache.catalina.core.standardcontext.startinternal context [/ospflowcenter] startup failed due to previous errors

可以看到上面3行日誌分別顯示了

一般通過第1,3行日誌我們可以確定問題日誌在**,通過第2行我們可以得知和filter有關,但是具體的問題還需要我們去容器日誌裡檢視,這裡一般是輸出到了localhost.log裡面。但是為了方便定位,我們可以在啟動失敗的服務的classes路徑下新增logging.properties檔案,來將日誌輸出到catalina中

org.apache.catalina.core.containerbase.[catalina].level=info

org.apache.catalina.core.containerbase.[catalina].handlers=j**a.util.logging.consolehandler

然後再次重啟tomcat觀察輸出日誌:

21-feb-2022 09:38:48.593 severe [localhost-startstop-1] org.apache.catalina.core.standardcontext.filterstart exception starting filter [filterservice]

j**a.lang.nosuchmethoderror: org.jdom.element.addcontent(lorg/jdom/element;)lorg/jdom/element;

這下一目了然了,錯誤發生在filterservice中存在nosuchmethoderror的錯誤,字面意思找不到類中對應的方法,一般是由於包衝突導致的,同乙個類路徑在多個包存在,tomcat載入了沒有使用方法的類所以丟擲了異常,可是這就很奇怪了,3臺機器明明**完全一樣,為什麼其他伺服器沒有問題呢。

這裡通過查閱資料得到乙個結論:

tomcat在載入同一目錄下的jar的順序是無序的

結合我們遇到的問題,我想tomcat載入jar的時候根據機器資訊做了一些排序,導致了能啟動的伺服器一直可以,而不能啟動的伺服器就jar包的載入順序一直錯誤,導致了jar衝突。具體怎麼載入的估計需要去看tomcat原始碼,但是很多時候我們知道結果就可以了,沒必要太追究過程,當然如果有時間去了解肯定更好。

解決衝突的辦法,tomcat提供了在context.xml可以配置優先載入哪些類

記一次DHCP排錯

如拓撲,某業務整個網路劃分在乙個vlan之下,入網的終端裝置要接收來自dhcp伺服器的ip指派,業務正常,客戶開心,一切都顯得祥和安靜 忽然有一天,使用者的乙個動作打破了一切。他把終端的網線無情的插入到了路由的lan口,如此,路由器本身的dhcp發揮作用,混進了這個vlan。自此,這個vlan下廣播...

記一次DHCP排錯

如拓撲,某業務整個網路劃分在乙個vlan之下,入網的終端裝置要接收來自dhcp伺服器的ip指派,業務正常,客戶開心,一切都顯得祥和安靜 忽然有一天,使用者的乙個動作打破了一切。他把終端的網線無情的插入到了路由的lan口,如此,路由器本身的dhcp發揮作用,混進了這個vlan。自此,這個vlan下廣播...

記一次python mem排錯

docker run 乙個容器 多個測試樣例 結果顯示 有個測試樣例被 killed docker stats 檢視 發現記憶體接近90g 而我實際執行時 只有 1g的記憶體。所以被killed。root a34h05007.cloud.h05.amtest87 root docker stats ...