在Linux或Mac下,啟動Tomcat時會報以下錯誤:
Caused by: java.lang.IllegalStateException: Unable to complete the scan for annotations for web application [/cmi] 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]
at org.apache.catalina.startup.ContextConfig.checkHandlesTypes(ContextConfig.java:2174)
at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:2112)
at org.apache.catalina.startup.ContextConfig.__processAnnotationsJar(ContextConfig.java:2058)
at org.apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.java:55017)
at org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:2028)
at org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1981)
at org.apache.catalina.startup.ContextConfig.processClasses(ContextConfig.java:1237)
at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1136)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:768)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:301)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5034)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
... 50 more
通過上面的錯誤信息处硬,第一眼看起來是因為-Xss的值設置的比較小疮蹦,但是調(diào)整-Xss的參數(shù)方法是不正確的。其中 -Xss的解釋如下:
-Xss:每個線程的Stack大小奈籽,“-Xss 15120” 這使得tomcat每增加一個線程(thread)就會立即消耗15M內(nèi)存痛悯,而最佳值應該是128K,默認值好像是512k.
解決方案如下:
后面看到的錯誤信息 org.bouncycastle.asn1.ASN1EncodableVector 是出在這個類上鸵鸥,
這是因為tomcat啟動會去掃描jar嵌巷,這個類是出現(xiàn)在bcprov.jar這個包萄凤。所以在tomcat的conf目錄里面catalina.properties的文件中
在tomcat.util.scan.StandardJarScanFilter.jarsToSkip=里面加上bcprov.jar過濾啟動不會報錯了
具體如下:
自己的Tomcat版本是8.5.38
另外網(wǎng)上的另一種解決方案是升級Tomcat版本。自己也試了一下搪哪。用Tomcat9.0.6 也會出現(xiàn)這個問題靡努,只不過頻率比較低。