2015-11-17 157 views
1

我在MAC上嵌入了一個tomcat(7.0.64),並部署了一個在java 1.7.067上運行的war文件。出於某種原因,我的Tomcat服務器掛在通話「Tomcat.start()」上。在嵌入式Tomcat中部署戰爭

我很確定它會卡住部署war文件。我想到了這一點,我插入了一個不同的戰爭文件(一個簡單的問候世界),並工作。

我試着連接tomcat log.properties,並將日誌導向到希望獲得任何線索的文件。但我看不出有任何異常,如果它不能找到「DTDDVFactoryImpl」,因爲這是JDK庫本身的一部分,記錄停止在這些線路,

FINE: Loading class from parent 
Nov 16, 2015 9:30:01 PM org.apache.catalina.loader.WebappClassLoader loadClass 
FINE: Loading class from parent 
Nov 16, 2015 9:30:01 PM org.apache.catalina.loader.WebappClassLoader loadClass 
FINE: loadClass(com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl, false) 
Nov 16, 2015 9:30:01 PM org.apache.catalina.loader.WebappClassLoader loadClass 
FINE: loadClass(com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl, false) 
Nov 16, 2015 9:30:01 PM org.apache.catalina.loader.WebappClassLoader loadClass 
FINE: loadClass(com.sun.org.apache.xerces.internal.impl.dv.dtd.DTDDVFactoryImpl, false) 
Nov 16, 2015 9:30:01 PM org.apache.catalina.loader.WebappClassLoader loadClass 
FINE: loadClass(com.sun.org.apache.xerces.internal.impl.dv.dtd.DTDDVFactoryImpl, false) 

不知道還有我包括xercesimpl.jar也是如此。

基本上,我正在尋找可以幫助我弄清楚什麼或哪些類從Web部署發生阻塞的方法。

任何想法/指針?

TIA

更新 - 我的log.properties樣子,

handlers=java.util.logging.ConsoleHandler, org.apache.juli.FileHandler 

org.apache.juli.FileHandler.level=ALL 
org.apache.juli.FileHandler.directory=./logs 
org.apache.juli.FileHandler.prefix=tomcat- 

java.util.logging.ConsoleHandler.level=ALL 
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter 

org.apache.catalina.level=FINEST 
org.apache.catalina.handlers=org.apache.juli.FileHandler 
+0

這些日誌文件中的所有行嗎?什麼是log.properties? – Stefan

+0

是的,這些是日誌文件的最後一行。 – Vicky

回答

0

行 -

FINE: loadClass(com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl, false) 

上述消息意味着,Web應用程序已經 停止,但TimerTask嘗試從它加載一個類。 什麼web應用程序已啓動此計時器? 如果計時器是由此Web應用程序啓動的,那麼這是您的 錯誤。當Web應用程序停止時,應該已配置一個 javax.servlet.ServletContextListener以停止(取消)定時器。當Web 應用程序已停止時,您無法加載類。 如果定時器是由其他Web應用程序啓動的,則表示您的PermGen內存泄漏處於某個地方,即 。確保在server.xml中配置了 JreMemoryLeakPreventionListener。 據瞭解,Java XML API中存在PermGen內存泄漏。一個 變通方法來抑制它被添加到JreMemoryLeakPreventionListener 在r884341 [1] 馬克對內存泄漏 http://people.apache.org/~markt/presentations/2010-11-04-Memory-Leaks-60mins.pdf OR 捆綁的Apache Xerces的一個單獨的副本與Web應用程序 可以幫助演示。如果根本原因是您未能取消定時器,它將無濟於事。 [1] http://svn.apache.org/viewvc?view=revision&revision=r884341

希望這會有所幫助。

+0

不確定「web應用程序已被停止意味着什麼」?在這一點上,我只是部署這個(只有一個)應用程序。我希望找到的是,如果由於某種原因tomcat無法部署此應用程序,那麼它應該拋出某種類型的異常,指出類/ etc等缺失的細節。 – Vicky

+0

只有一個應用程序正在部署,如果它的部署本身沒有通過,那麼我認爲這個應用程序中的任何計時器都不會發揮作用。另外我也嘗試在類路徑中捆綁一個XercesImpl.jar,這也沒有幫助。 JreMemoryLeak,對此不太確定,但我會給它一個機會。 – Vicky