Java web 服務啓動時Xss溢出異常處理筆記

本文來自網易雲社區java

做者:王飛nginx


錯誤日誌

錯誤日誌要仔細看,第一行不必定就是關鍵點,這個錯誤出現的時候,比較靠後,其中關鍵行就是下面這句。web

Caused by: java.lang.IllegalStateException: Unable to complete the scan for annotations for web application [] due to a StackOverflowError. Possible root causes include a too low setting for -Xss and illegal cyclic inheritance dependencies. The class hierarchy being processed was [org.bouncycastle.asn1.ASN1EncodableVector->org.bouncycastle.asn1.DEREncodableVector->org.bouncycastle.asn1.ASN1EncodableVector]

問題找到了,那如何解決呢?

網上給出了一些解決辦法,大體能夠分爲如下幾種,我也嘗試了一下。django

方法一 調整Xss參數

Xss是什麼呢?它是用來設置每一個線程的堆棧大小。JDK5.0之後每一個線程堆棧大小爲1M,之前每一個線程堆棧大小爲256K。更具應用的線程所需內存大小進行調整。在相同物理內存下,減少這個值能生成更多的線程。可是操做系統對一個進程內的線程數仍是有限制的,不能無限生成,經驗值在3000~5000左右。tomcat

把這參數設置的更大,如-Xss10M,問題解決。app

NDP部署系統中,設置jvm的參數位置在「發佈配置」->「jvmExtra」字段中,填上從新發布便可生效。jvm

當前這裏我沒有去嘗試設置到最小是多大能夠解決問題,由於這種解決方式雖然你能用,但並不合理。由於這樣設置之後,服務中每啓動一個線程,就會佔用所設置的大小,在內存充裕的狀況能夠偷懶着,這麼作。另一個緣由是這個問題出如今個人一個組件包內,這麼作的話,會讓後期其它組件包啓動的服務都須要去手動設置這個值,因而咱們嘗試去看看jar包有沒有問題?maven

方法二 檢查jar包是否有問題

看到有人說升級jar至最新版本能夠解決問題,不過很惋惜,我引用的進來的jar已是最新版本,沒法升級。spa

但我再查看jar的時候發現,項目中引用了兩個版本的jar包文件呢,因而猜想多是jar包衝突致使的。嘗試maven打包中排除加載舊版本的jar,保留一個jar包版本。操作系統

重啓成功。

排除某一個jar中引用的某個jar文件方法以下:

<dependency>
    <groupId>com.xxx.xxx</groupId>
    <artifactId>commons-utils</artifactId>
    <version>0.17.5</version>
    <exclusions>
        <exclusion>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-jdk15on</artifactId>
        </exclusion>
    </exclusions></dependency>

方法三 跳過tomcat啓動檢查

由於tomcat啓動會去掃描jar包,看錯誤信息org.bouncycastle.asn1.ASN1EncodableVector,是出在這個類

這個類出如今bcprov*.jar這個包

因此在tomcat的conf目錄裏面catalina.properties的文件,

在tomcat.util.scan.DefaultJarScanner.jarsToSkip=裏面加上bcprov*.jar過濾

啓動不會報錯了,這個方法沒有嘗試,由於NDP部署是不支持配置該功能的,不適合個人業務場景。

小結

Xss溢出的緣由,多半是jar問題,因此儘量的查找jar是否出錯,而不是去經過設置Xss的大小或者去tomcat的設置跳過檢查,都不是真正的經過問題根本緣由去解決bug。

固然經過方案二沒法確認jar包問題的話,可能首選的仍是方案三,不過方案三在NDP部署時沒法設置,那麼最後能夠考慮方案一。

參考文獻

  1. tomcat啓動報錯too low setting for -Xss stackoverflow

  2. tomcat啓動報錯too low setting for -Xss


網易雲免費體驗館,0成本體驗20+款雲產品!

更多網易研發、產品、運營經驗分享請訪問網易雲社區


相關文章:
【推薦】 django項目在uwsgi+nginx上部署遇到的坑
【推薦】 Kylin存儲和查詢的分片問題

相關文章
相關標籤/搜索