1. 程式人生 > >tomcat多次部署專案導致memory leak

tomcat多次部署專案導致memory leak

這幾日,忙著把改好的專案遠端部署到web伺服器上(tomcat原諒我還在用tomcat)之前也遠端部署過一次,用的無線網,網速過慢第一次還沒有成功。沒辦法吃完飯繼續,累了趴了一會兒,沒想到醒來就傳好了。當時沒想太多,完事就回去了。

這次,算是一次版本升級,各種事情專案拖了一陣子,其實一天就可以將東西改好了。結果問題來了,好容易上傳完,結果訪問主頁出現了異常,c.tld應該是c標籤的問題,看了一下程式碼,頁面沒用到c標籤,只有正則表示式,只能把引入c標籤那一句刪除掉。然後上傳確實沒有問題了。

可是,改完又出現另外一個問題,主頁可以訪問,可是驗證碼沒出來,大概又是服務出現了問題。在自己機器上試了一下,也是沒有出來,可是多點幾下又好了,本機是出現在連線資料庫上。可是,遠端部署的資料庫肯定是沒有問題的,結果再觸發別的連結,出現了下面的問題:

Message:Thefollowingwebapplicationswerestopped(reloaded,undeployed),buttheir classesfrompreviousrunsarestillloaded

inmemory,thuscausingamemoryleak(useaprofilertoconfirm)

按字面意思,只知道這是記憶體洩露,但是也不知道怎麼解決!大概意思是GC沒有將前面部署的class清理,而這些類卻還存在於記憶體當中。
參考了一下別的文章,一個好的辦法是將一些每次要用到的第三方jar包放到tomcat安裝目錄的lib下。以便每次遠端部署時,就可以直接將war包中的jar都刪除掉,這樣專案就非常小了。其次,就是增加tomcat執行時的記憶體大小,需要配置Java虛擬機器引數。
現在,我的問題是,每次部署前,先undeploy原來的工程,然後再上傳改好的工程。通過manager檢視,就會出現上面這樣的問題

解決方案:其實就是操作不當引起的,每次要undeploy之前,需要將工程stop一下,這樣就不會出現memory leak。就是如此小的一個問題,還是對tomcat的一些基本部署,解除安裝操作不瞭解,以後要多多積累!