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存储和查询的分片问题

相关文章
相关标签/搜索