问题
将war包部署在Tomcat安装路径的webapps下,启动Tomcat,在logs/catalina.out 日志文件中发现如下错误,web程序也没有运行起来:
Unable to complete the scan for annotations for web application [/xxxx] due to a StackOverflowError. Possible root causes include a too low setting for -Xss and illegal cyclic inheritance dependencies.
错误信息,写的还是挺清楚的:
不能完成注解的扫描,因为栈溢出错误。可能的原因是 -Xss的设置太小 和 非法的循环继承依赖。
解决
有三种解决方式:
-
增加单个线程堆栈的大小:
如:-Xss4m
缺点:在相同物理内存下,增加这个值就减少了生成线程的数量 -
在web.xml中,添加
metadata-complete="true"
如果项目中没有使用任何基于java servlet的配置,通过这个配置告诉Tomcat,不用去扫描该web程序。 -
限制tomcat扫描的jar文件
修改conf/catalina.properties 文件,找到属性:tomcat.util.scan.StandardJarScanFilter.jarsToSkip
,在它的值后面加一个",*",这样就不会扫描所有的jar包了。启动更快,也不会出异常。
注意,因为它的值很长,所用用\
连接,一定要找到结尾处。
如果还是不能解决,根据日志,可以检查下非法的循环继承依赖
的问题,检查下项目的依赖关系。