2013-02-16 7 views
12

La mia app si chiude in modo anomalo e utilizza molti barattoli e strumenti. della piattaforma - Windows Server 2008, Primavera, hibernate, Quarti, mysql, Tomcat-7,35Le possibili cause principali includono un'impostazione troppo bassa per le dipendenze dell'XX e delle dipendenze dell'eliminazione ciclica illegittima

Quando schiero e avviare il server prima volta perfettamente funzionante, ma se ricomincio io sono sempre il seguito erro

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) 
+0

qualcuno sa come modificare il valore -Xss? –

+1

Hai controllato i log dopo aver modificato il livello di registrazione per capire quale jar sta causando problemi. C'è un bug https://issues.apache.org/bugzilla/show_bug.cgi?id=53871 ma i registri potrebbero aiutarti a identificare il barattolo che sta causando il problema del livello di registro –

+0

solo in modalità di debug. Ma non è stato in grado di identificare la causa principale –

risposta

3

il mio progetto sta lavorando perfectely in tomcat7.25 ma non in 7,35

10

La traccia dello stack indica che tomcat sta esaurendo lo spazio di stack sul thread che sta eseguendo la scansione dell'applicazione alla ricerca di configurazioni servlet basate su java. Ci sono tre modi per risolvere questo problema.

  • Aumentare la dimensione dello stack -Xss4m
  • Dillo Tomcat non eseguire la scansione l'applicazione se non si utilizza alcuna configurazione Servlet Java aggiungi metadata-complete="true" al vostro web-app in web.xml
  • Limitare i file jar cosa Tomcat scansioni. vedere http://tomcat.apache.org/tomcat-7.0-doc/config/jar-scanner.html

Update 1

è necessario passare -Xss4m alla JVM per impostare la dimensione dello stack, -Xss10m avrebbe fissato a 10 MB.

Anche io uso Hibernate e Spring nella mia applicazione con annotazioni, la scansione che tomcat fa è cercare le annotazioni di Servlet 3.0 in modo da poter ancora limitare le cose mentre si usano le annotazioni di sospensione e di sospensione, dal momento che la sospensione e le sospensioni vengono scansionate per dalla primavera e ibernato.

Se si esegue tomcat come servizio di Windows, è necessario passare gli argomenti tramite procrun poiché questo è l'eseguibile che avvia la jvm. I documenti per procrun sono a http://commons.apache.org/daemon/procrun.html. tomcat7.exe è davvero procrun.exe rinominato, il che significa che tutte le opzioni JVM vengono scritti nel Registery sotto

Le definizioni di base di servizi sono mantenuti sotto la chiave di registro:

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \

parametri aggiuntivi sono memorizzati nel registro di sistema:

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

Su procrun Windows a 64 bit utilizza sempre la vista del registro a 32 bit per l'archiviazione della configurazione . Ciò significa che i parametri saranno memorizzati all'interno:

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

Update 2

Tomcat è stato tweaking come funziona lo scanner tra rilasci di punti. prova a scorrere attraverso le versioni 7.25,7.26 ... ecc per trovare la versione in cui si rompe, passa attraverso le note di rilascio per quella versione per vedere se hanno cambiato il funzionamento dello scanner.

Un'altra cosa che puoi provare a fare è creare un altro file di guerra che contiene tutti i vasi di terze parti nel tuo WEB-INF \ lib ma non il tuo codice. Controlla se ricevi questo errore se ti avvali, e se lo fai allora dovresti presentare una segnalazione di bug con tomcat e rendere disponibile a loro il tuo progetto di esempio che replica il problema, su github o qualche altro sistema di hosting di codice gratuito. Sono sicuro che se c'è un bug lo sistemeranno.

+0

l'ultima app di 6 mesi ha funzionato bene, l'ultima build in poi solo sta succedendo, ma non abbiamo molti cambiamenti di codice nell'ultima build. Ho anche il codice veriferd. Potresti dirmi come cambiare la dimensione dello stack. Il mio server Windows ha RAM da 4 GB. La sorpresa è quando riavvio il Tomcat CPU Ussage al 100%. la tua seconda e terza opzione non è accettabile per il mio caso. Dal momento che stiamo usando le anotazioni primavera e hibenate –

+0

il mio progetto funziona perfettamente in tomcat7.25 ma non in 7.35 –

8

Per risolvere questo problema per TC Server 2.9, in esecuzione Tomcat 7.0.39 ho limitato i vasetti di saltare durante l'avvio per il contesto di configurazione utilizzando:

org.apache.catalina.startup.ContextConfig.jarsToSkip=*.jar 

in catalina.properties.

+0

E anche Tomcat 7.0.41 :) – enkor

+0

E Tomcat 7.0.56. Ho elaborato il vaso specifico anziché utilizzare un carattere jolly: pdfbox-app-1.8.1.jar ha causato questo ... qualcosa a che fare con una versione del castello gonfiabile all'interno del vaso – Edd

+0

Se hai Spring nella tua applicazione, semplicemente tu non è possibile desactive questa proprietà. – atrujillofalcon

0

Non sto correndo Tomcat come servizio di Windows, in modo da far passare attraverso -Xss10m, ho modificato catalina.bat, verso il fondo:

:doJpda 
if not "%SECURITY_POLICY_FILE%" == "" goto doSecurityJpda 
%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %JPDA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -Xss10m -classpath "%CLASSPATH%" - 

Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION% 
goto end 
1

Nel mio caso iTextpdf JAR (5,06 versione) che causa problema aveva dipendenza da org.bouncyCastle.*.jar e stava creando dipendenza ciclica.

Dopo l'aggiornamento alla versione 5.5.6, ha funzionato perfettamente. Se si aggiunge dipendenza Maven, pulire e aggiornare il progetto Maven.

<dependency> 
      <groupId>com.itextpdf</groupId> 
      <artifactId>itextpdf</artifactId> 
      <version>5.5.6</version> 
</dependency> 
+0

Mi sono trasferito da quel progetto. Quindi non in grado di convalidare. potrebbe essere la risposta coud essere corretta. Abbiamo anche usato il bouncycastle. +1 –

Problemi correlati