16

私のアプリはかなり大きく、多くのjarファイルとツールを使用しています。プラットフォーム-Windows2008サーバー、Spring、Hibernate、Quarts、mysql、tomcat-7.35

サーバーを最初にデプロイして起動すると完全に機能しますが、再起動すると以下のエラーが発生します

    SEVERE: ContainerBase.addChild: start: 
    org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/TestProject]]
    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:471)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)
    Caused by: java.lang.IllegalStateException: Unable to complete the scan for annotations for web application [/TestProject]. 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.HashSet.<init>(HashSet.java:103)
    at org.apache.catalina.startup.ContextConfig.populateSCIsForCacheEntry(ContextConfig.java:2252)
    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)
    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)
    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)
    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)

    Feb 16, 2013 12:16:10 PM org.apache.catalina.startup.HostConfig deployDirectory
    SEVERE: Error deploying web application directory C:\apache-tomcat-7.0.35\webapps\TestProject
    java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[TestProject]]
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:904)
    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:471)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
        at java.lang.Thread.run(Thread.java:722)
4

4 に答える 4

14

スタック トレースは、アプリケーションをスキャンして Java ベースのサーブレット構成を探しているスレッドで、Tomcat がスタック スペースを使い果たしていることを示しています。この問題を解決するには、3 つの方法があります。

  • スタックサイズを増やす-Xss4m
  • java ベースのサーブレット構成を使用していない場合は、Tomcat にアプリケーションをスキャンしないようにmetadata-complete="true"指示し、web.xml の Web アプリに追加します。
  • Tomcat がスキャンする jar ファイルを制限します。http://tomcat.apache.org/tomcat-7.0-doc/config/jar-scanner.htmlを参照してください

更新 1

-Xss4m を jvm に渡してスタック サイズを設定する必要があります。-Xss10m は 10mb に設定します。

私は自分のアプリケーションでも注釈付きで Hibernate と Spring を使用しています。Tomcat が行うスキャンは Servlet 3.0 注釈を探すことです。これにより、hibernate と spring の注釈を使用している間も物事を制限できます。これは、hibernate と spring の注釈が spring と hibernate によってスキャンされるためです。 .

tomcat を Windows サービスとして実行している場合は、jvm を起動する実行可能ファイルであるため、procrun を介して引数を渡す必要があります。procrun のドキュメントはhttp://commons.apache.org/daemon/procrun.htmlにあります。tomcat7.exe は実際には procrun.exe の名前が変更されています。つまり、すべての jvm オプションが下のレジスタに書き込まれます。

基本的なサービス定義は、次のレジストリ キーの下に保持されます。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\

追加のパラメーターは、次のレジストリに保存されます。

HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\ProcRun 2.0\\Parameters

64 ビット Windows では、procrun は常に 32 ビット レジストリ ビューを使用して構成を保存します。これは、パラメータが内部に格納されることを意味します。

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation\ProcRun 2.0\

更新 2

Tomcat は、ポイント リリース間でスキャナーがどのように機能するかを微調整してきました。バージョン 7.25、7.26 ... などをロールフォワードして、問題が発生したバージョンを見つけ、そのバージョンのリリース ノートを調べて、スキャナーの動作が変更されたかどうかを確認します。

あなたが試すことができるもう1つのことは、あなたのコードではなく、あなたのWEB-INF\libにすべてのサードパーティのjarを含む別のwarファイルを作成することです。起動時にエラーが発生するかどうかを確認し、エラーが発生した場合は、Tomcat にバグ レポートを提出し、問題を再現するサンプル プロジェクトを github またはその他の無料のコード ホスティング システムで利用できるようにする必要があります。バグがあれば、彼らはそれを修正すると確信しています。

于 2013-02-16T15:35:09.870 に答える
1

org.bouncyCastle.*.jar私の場合、依存関係があり、循環依存関係を作成していたため、iTextpdf JAR(5.06バージョン)が問題を引き起こしました。

バージョンに更新した後5.5.6、完全に機能しました。maven の依存関係を追加する場合は、maven プロジェクトをクリーンアップして更新します。

<dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.6</version>
</dependency>
于 2017-09-14T11:43:29.877 に答える