本文来自网易云社区

作者:王飞

错误日志

错误日志要仔细看,第一行不一定就是关键点,这个错误出现的时候,比较靠后,其中关键行就是下面这句。

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]

问题找到了,那如何解决呢?

网上给出了一些解决办法,大致可以分为以下几种,我也尝试了一下。

方法一 调整Xss参数

Xss是什么呢?它是用来设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。

把这参数设置的更大,如-Xss10M,问题解决。

NDP部署系统中,设置jvm的参数位置在“发布配置”->“jvmExtra”字段中,填上重新发布即可生效。

当前这里我没有去尝试设置到最小是多大可以解决问题,因为这种解决方式虽然你能用,但并不合理。因为这样设置以后,服务中每启动一个线程,就会占用所设置的大小,在内存充裕的情况可以偷懒着,这么做。另外一个原因是这个问题出现在我的一个组件包内,这么做的话,会让后期其它组件包启动的服务都需要去手动设置这个值,于是我们尝试去看看jar包有没有问题?

方法二 检查jar包是否有问题

看到有人说升级jar至最新版本可以解决问题,不过很可惜,我引用的进来的jar已经是最新版本,无法升级。

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

Java web 服务启动时Xss溢出异常处理笔记的更多相关文章

  1. java web项目启动时自动加载自定义properties文件

    首先创建一个类 public class ContextInitListener implements ServletContextListener 使得该类成为一个监听器.用于监听整个容器生命周期的 ...

  2. java web项目启动时浏览器路径不用输入项目名称方法

    http://blog.csdn.net/qq542045215/article/details/44923851

  3. Web应用启动时,后台自动启动一个线程(转)

    原文:http://blog.sina.com.cn/s/blog_6810dfc20101ipzq.html Web应用启动时,后台自动启动一个线程 (1)前言 前几天,manager问道一个问题: ...

  4. JavaWeb 服务启动时,在后台启动加载一个线程

    JavaWeb 服务启动时,在后台启动加载一个线程. 目前,我所掌握的一共有两种方法,第一种是监听(Listener),第二种是配置随项目启动而启动的Servlet. 下面对这两种方法做一简单的介绍, ...

  5. "轻"量级 Java Web 服务框架漫谈

    博文太长了, 还是先说下概要: 框架"轻量"与否可以从两方面来看待: 1) 框架本身的体量 - 例如小 jar 无依赖的苗条框架; 2) 用户使用框架是否获得各种便利而无阻隔(&q ...

  6. 转载:如何让spring mvc web应用启动时就执行

    转载:如何让spring mvc web应用启动时就执行特定处理 http://www.cnblogs.com/yjmyzz/p/4747251.html# Spring-MVC的应用中 一.Appl ...

  7. web服务启动spring自己主动运行ApplicationListener的使用方法

    我们知道.一般来说一个项目启动时须要载入或者运行一些特殊的任务来初始化系统.通常的做法就是用servlet去初始化.可是servlet在使用spring bean时不能直接注入,还须要在web.xml ...

  8. Java Web使用过滤器防止Xss攻击,解决Xss漏洞

    转: Java Web使用过滤器防止Xss攻击,解决Xss漏洞 2018年11月11日 10:41:27 我欲乘风,直上九天 阅读数:2687   版权声明:本文为博主原创文章,转载请注明出处!有时候 ...

  9. Java Web项目启动执行顺序

    一. 1.启动一个WEB项目,WEB容器会先去读取它的配置文件web.xml,读取<context-param>和<listener>两个节点. 2.接着,容器创建一个Serv ...

随机推荐

  1. Spark Mllib里如何将trainDara训练数据文件里第一行是字段名不是数据给删除掉(图文详解)

    不多说,直接上干货! 具体,见 Hadoop+Spark大数据巨量分析与机器学习整合开发实战的第13章 使用决策树二元分类算法来预测分类StumbleUpon数据集

  2. 20 个案例教你在 Java 8 中如何处理日期和时间?

    前言 前面一篇文章写了<SimpleDateFormat 如何安全的使用?>, 里面介绍了 SimpleDateFormat 如何处理日期/时间,以及如何保证线程安全,及其介绍了在 Jav ...

  3. Windows忘记mysql的密码

    1.查看mysql的安装路径 show variables like "%char%"; 路径:C:\Program Files\MySQL\MySQL Server 5.7\ 2 ...

  4. Windows下Apache+PHP+MySQL开发环境的搭建(WAMP)

    准备工作: 1.下载apache服务器安装包,官网http://www.apache.org/,下载地址:http://httpd.apache.org/download.cgi 2.下载MySQL, ...

  5. be seen doing和be seen to do的区别

    1. be seen doing和be seen to do的区别 be seen doing表被看到正在做某事:be seen to do 表被看到做某事(不表进行) He was seen to ...

  6. windows下Mongodb和Memcached安装笔记

    MongoDB安装: D:\ProgramFiles\MongoDBServer3.2\bin\mongod --dbpath D:\mongoData D:\ProgramFiles\MongoDB ...

  7. explian使用介绍

    1).id列数字越大越先执行,如果说数字一样大,那么就从上往下依次执行,id列为null的就表是这是一个结果集,不需要使用它来进行查询. 2).select_type列常见的有:A:simple:表示 ...

  8. POJ 1741 Tree (树的分治,树的重心)

    题意:给一棵树,n个节点,给定一个数k,求任意满足dist(a,b)<=k的点对的数量. 思路: 这道题的思路比较简单,但是细节很多. 此题可以用分治法,如何分治? (1)如果path(a,b) ...

  9. MDI和在TabPage

    无奈的.net探索 MDI和在TabPage中增加Form分页? MDI(Multiple Document Interface)是一种在窗口中嵌套窗口的接口, 与之对应的是SDI(Single Do ...

  10. stringstream类的简介和用法

    一.简介 <sstream>类库定义了三种类:istringstream,ostringstream,stringstream.分别用来进行流的输入,流的输出,输入输出操作.在此演示str ...