現象環境描述:測試環境,一直在運作跨易達系統(業務系統),研發重新發了個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

很奇怪,程式代碼明明放在根目錄裡面,怎麼會找不到呢!
3、檢視日志
tail -f catalina.out,重新啟動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,如下圖:
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 &quot;%r&quot; %s %b" />
預設是開啟的,每天會生成一個單獨的日志,例如:localhost.2016-05-22.log,我的這一塊的配置不知出于什麼原因被登出了,不然也不會費這麼長時間了。
本文出自 “Linux技術交流” 部落格,請務必保留此出處http://9678130.blog.51cto.com/9668130/1782050