`
wgbaoweii
  • 浏览: 29098 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

【转载】Tomcat 7.0.3x 启动慢并且遇到StackOverflowError的异常的解决办法

阅读更多

之前使用tomcat7时遇到启动报错问题,日志如下:
严重: ContainerBase.addChild: start: 
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/mypro]] 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) 
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) 
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) 
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633) 
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1114) 
at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1673) 
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) 
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
at java.lang.Thread.run(Thread.java:619) 
Caused by: java.lang.IllegalStateException: Unable to complete the scan for annotations for web application [/mypro]. Possible root causes include a too low setting for -Xss and illegal cyclic inheritance dependencies 
at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:2109) 
at org.apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.java:1981) 
at org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1947) 
at org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1932) 
at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1326) 
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:878) 
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:369) 
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) 
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) 
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5179) 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
... 11 more 
Caused by: java.lang.StackOverflowError 
at java.util.HashMap.get(HashMap.java:300) 
at org.apache.catalina.startup.ContextConfig.populateSCIsForCacheEntry(ContextConfig.java:2257) 
at org.apache.catalina.startup.ContextConfig.populateSCIsForCacheEntry(ContextConfig.java:2269) 
at org.apache.catalina.startup.ContextConfig.populateSCIsForCacheEntry(ContextConfig.java:2269) 
at org.apache.catalina.startup.ContextConfig.populateSCIsForCacheEntry(ContextConfig.java:2269) 
at org.apache.catalina.startup.ContextConfig.populateSCIsForCacheEntry(ContextConfig.java:2269) 
at org.apache.catalina.startup.ContextConfig.populateSCIsForCacheEntry(ContextConfig.java:2269) 
……
 


在网上找了很久,最终解决问题,在这时MARK一下。以下是解决方法: 

--------------------------------------------------以下文章为转载-------------------------------------------------- 

使用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包 

网上大多数的答案的都是说在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类文件。
 


原文地址:http://qingyuexiao.iteye.com/blog/1886059

分享到:
评论

相关推荐

    tomcat7.0.3免安装版

    【标题】:“Tomcat7.0.3免安装版”是指一种无需进行复杂安装过程的Apache Tomcat服务器版本。这个版本适用于快速部署和测试环境,它包含必要的组件,可以直接运行,便于开发者或系统管理员快速启动和停止Tomcat服务...

    tcnatlve-1(tomcat7.0.3)

    适用于tomcat7.0.3的APR库,Tomcat7.0免安装版是不带有APR库的,只要将tcnative-1.dll放入tomcat7.0\bin下就可以发布并运行程序了,我还附上了tomcat7.0.3

    Nessus-7.0.3-x64

    Nessus-7.0.3-x64Nessus-7.0.3-x64Nessus-7.0.3-x64Nessus-7.0.3-x64

    SecureCRT 7.0.3 x64

    SecureCRT 7.03官方64位版 发布于2013年1月17日。 注册方法自6.7.5版本后是一样的。 Standard 64-bit (x64) Windows PC Installer SecureCRT 7.0.3 (non-integrated) scrt703-x64.exe

    SecureCRT and SecureFX v7.0.3 x86 x64完全注册正式破解版

    SecureCRT and SecureFX v7.0.3 x86 x64完全注册正式破解版

    ESXi7.0.3安装教程

    "ESXi 7.0.3 安装教程" 本文将详细介绍 ESXi 7.0.3 的安装过程,并对安装步骤进行详细解释。 VMware ESXi 概述 VMware ESXi 是 VMware 公司推出的虚拟机监控程序,能够将物理服务器虚拟化为多个虚拟机,实现...

    SecureCrt7.0.3 x64破解

    文件列表:SecureCrt7.0.3_x64、SecureCrt7.0.3_x86、keygen、readme.txt 1. Main Program Installation install the binary program "scrt703-x64.exe" 2. Hack it kick the binary program "keygen.exe" Patch it ...

    SecureCRT & SecureFX 7.0.3 x64

    SecureCRT and SecureFX 7.0.3 (integrated) * scrt_sfx703-x64.exe * The integrated installer is required for settings to be shared between SecureCRT and SecureFX. The non-integrated installer does not ...

    Redis 7.0.3 for Windows

    总之,Redis 7.0.3 for Windows为Windows用户提供了一个强大的、安全的和高性能的数据存储解决方案。对于依赖Redis的业务,升级到7.0.3不仅可以利用新的特性,还能确保系统的安全性和稳定性,值得立即行动。

    ImageMagick-7.0.3-6-Q16-x64-static

    ImageMagick-7.0.3-6-Q16-x64-static

    cudnn-9.0-linux-x64-v7.0.3

    在本压缩包“cudnn-9.0-linux-x64-v7.0.3”中,包含的是针对CUDA 9.0版本的CUDNN 7.0.3,这是一个适用于Linux操作系统的64位版本。 CUDNN的主要功能是优化深度学习模型的训练和推理过程,它提供了高效的卷积、池化...

    PLSQL Developer 7.0.3 Setup.exe

    PLSQL Developer 7.0.3 Setup.exe PLSQL Developer 7.0.3 Setup.exe PLSQL Developer 7.0.3 Setup.exe

    ios7.0.3的shsh文件 刷机用

    ios7.0.3shshios7.0.3的shsh文件 刷机用

    PowerBuilder 7.0.3补丁

    Release Notes for PowerBuilder[R] Version 7.0.3 (c) 1991-2000 Sybase, Inc. and its subsidiaries. All rights reserved. Updated 12/06/00 _________________________________________________________________...

    itext7-7.0.3.zip

    iText 7.0.3 是一个流行的Java库,用于创建和编辑PDF文档。这个压缩包包含了一系列与iText相关的组件和验证文件,主要用于确保软件的完整性和安全性。以下是每个文件的基本介绍及其关联的知识点: 1. **forms-7.0.3...

    PowerShell-7.0.3-win-x64.zip

    7.0.3-win-x64.zip是PowerShell的一个特定版本,专为64位Windows系统设计,旨在提供更高效、用户友好的操作体验。 安装PowerShell 7.0.3后,用户可以通过命令行界面执行各种系统管理和任务自动化操作,如文件管理、...

    安卓微信7.0.3版本.zip

    《安卓微信7.0.3版本:新功能与优化解析》 微信,作为全球最大的即时通讯平台之一,其每一次更新都备受关注。这次我们聚焦的是微信的安卓7.0.3版本,这是腾讯官方推出的新一轮升级,旨在提供更加优质且稳定的用户...

    update-cm-7.0.3-N1-signed

    【标签】"update -cm -7.0.3-N1 -signed" 代表了这个更新包的关键特征:它是CyanogenMod的更新,版本号7.0.3,面向设备型号N1,并且已经过签名验证。签名验证是Android系统安全的一部分,确保更新来自可信的源,未被...

    Highcharts-7.0.3.zip

    在"Highcharts-7.0.3.zip"这个压缩包中,包含了该库的7.0.3版本,这是一次更新,可能包含了性能优化、新功能或者对现有功能的改进。下面将详细介绍Highcharts及其相关知识点。 1. **兼容性**:Highcharts 兼容广泛...

    redis-windows-7.0.3.rar

    此压缩包"redis-windows-7.0.3.rar"提供的是Redis针对Windows操作系统的最新版本7.0.3。在Windows环境下,Redis的部署和使用与Linux有所不同,但其核心功能保持一致。 1. **Redis的安装与配置**: 解压此rar文件后...

Global site tag (gtag.js) - Google Analytics