天天看點

tomcat排錯過程

現象環境描述:測試環境,一直在運作跨易達系統(業務系統),研發重新發了個war包,就通路不了了,送出到運維這邊說是環境問題,于是我開始排查。

1、JAVA_HOME、CATALINA_HOME檢查

[root@localhost conf]# echo $JAVA_HOME

/usr/local/jdk1.7.0_60

2、檢查server.xml 

<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">

<Context path="" docBase="/usr/local/oss/greenpass/wtpwebapp/greenpass" debug="0"  crossContext="true"  reloadable="true" trusted="false" />

檢查修改後的網站根目錄,沒有問題

浏覽器通路提示,網頁不存在

curl提示404

tomcat排錯過程

很奇怪,程式代碼明明放在根目錄裡面,怎麼會找不到呢!

3、檢視日志

tail -f catalina.out,重新啟動tomcat,提示日志錯誤如下:

tomcat排錯過程

裡面有些錯誤和警告,主要是:

十一月 23, 2013 7:21:58 下午 org.apache.catalina.core.StandardContext startInternal

SERVER: Error filterStart

SERVER: Context [/st] startup failed due to previous errors

4、分析原因,解決方法

分析:Tomcat背景資訊太少以至于不能得出問題空間出在哪兒(Tomcat的日志目錄也無相關資訊)通過配置Tomcat的Log,讓它記錄更多的日志資訊,方能進一步分析原因。在不能啟動的Web應用目錄(我這裡是st)下WEB-INF/classes目錄中,建立logging.properties檔案,内容參考如下

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

############################################################

# Handler specific properties.

# Describes specific configuration info for Handlers.

org.apache.juli.FileHandler.level = FINE

org.apache.juli.FileHandler.directory = ${catalina.base}/logs

org.apache.juli.FileHandler.prefix = error-debug.

java.util.logging.ConsoleHandler.level = FINE

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

重新啟動tomcat,在logs檔案夾下面,會看到一個error-debug.log2016-05-23.log,如下圖:

tomcat排錯過程

more error-debug.log2016-05-23.log,發現一個錯誤提示資訊:

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'dataSourceJdbc' defined in file [/usr/local/oss/greenpass/wtpwebapp/greenpass/WEB-INF/classes/config/spring/spring-datasource.xml]: Could not resolve placeholder 'db1.driver' in string value 

"${db1.driver}"

發現是web根目錄的spring-datasource.xml裡面的db1.driver沒有定義,跟開發說了這個問題以後,注釋掉這部分代碼就能夠正常通路了。

備注:server.xml裡面有關于logs配置的資訊,如下:

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

               prefix="localhost_access_log." suffix=".txt"

               pattern="%h %l %u %t "%r" %s %b" />

預設是開啟的,每天會生成一個單獨的日志,例如:localhost.2016-05-22.log,我的這一塊的配置不知出于什麼原因被登出了,不然也不會費這麼長時間了。

本文出自 “Linux技術交流” 部落格,請務必保留此出處http://9678130.blog.51cto.com/9668130/1782050

繼續閱讀