tomcat启动报错too low setting for -Xss stackoverflow
来源:互联网 发布:报税软件 编辑:程序博客网 时间:2024/06/06 01:47
使用tomcat 7.0.3x版本的同学可以发现tomcat启动慢了不少,而且还可能遇到如下启动时异常:
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.
tomcat7.0.3X版本支持servlet3.0的特性,比如说支持@WebServlet、@WebListener,要支持这些特性,tomcat就得去扫描所有的jar包里面的每个类。这个异常表明在扫描jar包的时候,递归调用太深,导致栈溢出了,tomcat给了一个馊主意,让你增大xss,这个还是不好,xss加大了,可用线程数就少了。
分析tomcat源代码,发现它扫描的流程如下:
1.扫描所有jar包
2.通过查找jar包中META-INF/services/javax.servlet.ServletContainerInitializer文件内的定义,初始化ServletContainerInitializer实现
3.如果web.xml中配置了metadata-complete="true" 或者没有找到ServletContainerInitializer实现,都不会继续扫描jar包
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.
tomcat7.0.3X版本支持servlet3.0的特性,比如说支持@WebServlet、@WebListener,要支持这些特性,tomcat就得去扫描所有的jar包里面的每个类。这个异常表明在扫描jar包的时候,递归调用太深,导致栈溢出了,tomcat给了一个馊主意,让你增大xss,这个还是不好,xss加大了,可用线程数就少了。
分析tomcat源代码,发现它扫描的流程如下:
1.扫描所有jar包
2.通过查找jar包中META-INF/services/javax.servlet.ServletContainerInitializer文件内的定义,初始化ServletContainerInitializer实现
3.如果web.xml中配置了metadata-complete="true" 或者没有找到ServletContainerInitializer实现,都不会继续扫描jar包
如果出现上面所显示的启动问题,需要修改{tomcat路径}/conf/web.xml 修改方法: <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" metadata-complete="true">
网上大多数的答案的都是说在web.xml中加入了metadata-complete="true"就能避免这个异常。确实在很多场景下,这个异常是能够避免。但是使用spring-web-3.1.0.RELEASE的同学就杯具了,这个jar包中定义了一个ServletContainerInitializer,还是导致了扫描jar包。
我们可以用另外的办法来解决这个问题,我们让tomcat不扫描指定的jar包,tomcat就要轻松得多了,org.apache.tomcat.util.scan.StandardJarScanner中定义了defaultJarsToSkip,有了这个东东,我们就可以跳过某些jar包。
如果你不想使用servlet3.0 annotation支持,在tomcat的catalina.properties配置文件中tomcat.util.scan.DefaultJarScanner.jarsToSkip的值后面加一个",*",这样就不会扫描所有的jar包了。启动更快,也不会出异常。
tomcat在处理扫描是还有个小bug,比如我遇到了
SEVERE: Unable to process Jar entry [__MACOSX/cn/****/._HandlerFactory.class] from...
这是tomcat在扫描到以.class为后缀的文件后,就分析类,很明显,此文件都不是java类文件。tomcat不应该只判断后缀为.class就是java类文件。
阅读全文
0 0
- tomcat启动报错too low setting for -Xss stackoverflow
- tomcat启动报错too low setting for -Xss
- Tomcat报too low setting for -Xss and illegal cyclic inheritance dependencies 内存溢出
- Ubuntu中启动ElasticSearch报错:max virtual memory areas vm.max_map_count [65530] is too low, increase to a
- 启动tomcat报错:Setting property 'source' to ' ' did not find a matching property
- VDA FunctionalLevel too low for Catalog
- ELK学习13_logstash启动报错[logstash.outputs.elasticsearch] Unknown setting 'host' for elasticsearch
- Tomcat 报错:Packet for query is too large (12238 > 1024). You can change this value
- tomcat 报错 Too many open files
- tomcat 报错 Too many open files
- Directory Listing For解决方法-tomcat启动,首页报错
- 启动Tomcat报错
- tomcat 启动报错
- 启动tomcat报错
- tomcat启动报错
- Tomcat 启动报错
- 启动Tomcat报错
- tomcat 启动报错
- 22
- 大数据-极值数据学院
- sdnu1037约数之和
- 飞速(FS)数据中心级交换机为什么受欢迎?
- BigDecimal
- tomcat启动报错too low setting for -Xss stackoverflow
- Mac OS 在终端未启动的情况下,快速调出终端
- Java基础之理解Annotation
- Mapreduce实现倒排索引建立
- Hexo博客中使用标签云hexo-tag-cloud
- 三种不同的标记信息表达方式(XML,JSON,YAML)
- leetcoder 78
- Integration with Existing Apps #
- 编写程序,当程序运行后,根据屏幕提示输入一个数字字符串,输入后统计有多少个偶数数字和奇数数字。