摘要:有鎖的地方就會有鎖競爭,并且也是一個耗時的過程,所以同一個如果并發出現在日志堆棧中勢必會導致一部分線程會,這對于線上系統中簡直就是災難改進在最近的版本中并沒有發現對的類做特殊處理,并且正如官方說的所以只要的版本大于,這個配置默認都是關閉的
起因
偶然一次路過同事電腦,看著黑底藍色滿屏的堆棧信息,過去笑著拍了拍他的肩膀說道「小哥,又在寫BUG呢」湊過去仔細看了一眼異常堆棧詳情,「虎軀一震」喲,高端的,這堆棧后面的還有類的包路徑信息呢呢,以前看堆棧的時候咋沒有特別注意
坐下打開電腦翻看了下一下Logback的代碼核心計算邏輯ch.qos.logback.classic.spi.PackagingDataCalculator
獲取Package下的MANIFEST.MF文件里面Implementation-Version信息
和獲取類所在的jar包路徑
可以看到所有的信息都在類對應的Class對象上
很多時候為了解決Maven扁平化依賴臃腫和依賴沖突問題,我們往往會用上類隔離框架,比如說支付寶開源的sofa-ark,其基本原理就是使用多帶帶的ClassLoader加載,并且將一部門類EXPORT,假設如果遇到沒有被EXPORT出來的類(幽靈Class),會發生什么情況呢?
分析因為是屬于沒有被EXPORT出來的類所以最終會委托給應用類加載器加載
為了防止重復加載,所以應用類加載器在加載類的時候會根據加載的className加鎖,因為類也不是應用類加載器加載的所以會進行雙親委派加載,最后拋出ClassNotFoundException,再結合PackagingDataCalculator對異常的處理
程序不會終止,所以我們可以得出結論只要碰到「幽靈Class」logback都會重新把類按照雙親委派的方式加載一遍。
有鎖的地方就會有鎖競爭,并且Class.load也是一個耗時的過程,所以同一個ClassName如果并發出現在日志堆棧中勢必會導致一部分線程會block,這對于線上系統中簡直就是災難.
在最近的logback版本中并沒有發現對ClassNotFoundException的類做特殊處理,并且正如logback官方說的
While useful, packaging data is expensive to compute, especially in applications with frequent exceptions.
所以只要logback的版本大于1.1.3,packageDate這個配置默認都是關閉的
https://logback.qos.ch/manual...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/73897.html
摘要:以往我們都是鼠標懸停才出現的幽靈菜單今天給大家介紹一個滾動的幽靈菜單滾動的幽靈菜單隨便設置代碼如下表格請輸入你需要的產品部分 以往我們都是鼠標懸停才出現的幽靈菜單;今天給大家介紹一個滾動的幽靈菜單 滾動的幽靈菜單 1.html 隨便設置代碼如下:表格*{margin:0;padding: 0;}body{ height: 2000px; }.shou{ width: 100%;...
閱讀 914·2021-09-29 09:35
閱讀 1258·2021-09-28 09:36
閱讀 1528·2021-09-24 10:38
閱讀 1076·2021-09-10 11:18
閱讀 637·2019-08-30 15:54
閱讀 2504·2019-08-30 13:22
閱讀 1969·2019-08-30 11:14
閱讀 705·2019-08-29 12:35