項目使用文件來保存修改,爲了方便直接把文件放在src目錄下;部署後發現過了一陣tomcat就會宕機;
日誌爲:
Oct 18, 2013 5:20:11 PM org.apache.catalina.core.StandardContext reload
INFO: Reloading this Context has started
Oct 18, 2013 5:20:11 PM org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap
SEVERE: The web application [/a7list] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@13c4a657]) and a value of type [com.caucho.services.server.ServiceContext] (value [com.caucho.services.server.ServiceContext@5384a3e4]) but failed to remove it when the web application was stopped. This is very likely to create a memory leak.
...-----
tomcat 6.025以後引入了一種內存泄露的檢查機制,會把不能垃圾收集的對像作日誌。
當您從新部署您的應用程序時,Tomcat 將建立新的類加載器。舊類加載器必須是垃圾回收,不然你會 permgen 內存泄漏。
分析緣由是因爲運行項目的classes目錄文件變動引發tomcat reload,同時reload時沒有釋放資源引發的宕機。
修改方式:
一、部署時修改tomcat 的server.xml文件,讓項目變動時不reload。
修改文件:conf\server.xml
修改位置:
<Host name="localhost" debug="0" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="/myapp" docBase=" " debug="0" reloadable="false"/>
二、將變動文件放到項目代碼外面。
採用的方式是兩種都使用了~