問題:tomcat從啟動乙個專案到載入完畢,這個階段占用了500+mb
之後隨便訪問專案幾個頁面,tomcat記憶體蹭蹭漲到了800+mb。從啟動的500+mb到800+mb期間只花了2分鐘左右。(pid不同是因為截圖問題)
當時懷疑記憶體洩露了,於是匯出剛啟動tomcat的dump檔案和已經漲到800多的dump檔案進行對比。
發現沒有什麼佔記憶體的物件。於是配置tomcat的監控工具來監控jvm。
修改tomcat的conf資料夾裡面的tomcat-users.xml
然後通過ip:埠/manager/status來訪問tomcat監控頁面
這個時候發現我的jvm最大記憶體是1797.50 mb。(我的電腦是8g)
但是jvm的最大記憶體分配規則是:物理記憶體的1/4(<1gb)
雖然監控工具顯示的最大記憶體我有疑問。但是操作任務管理器顯示tomcat的虛擬記憶體始終在1024mb以內。
開始測試jvm的新生代區記憶體情況。
這個時候新生代區使用的記憶體還沒釋放。
新生代區的使用記憶體釋放之後
發現tomcat記憶體不降反而公升了。於是又檢視了一遍資料,發現新生代區的total memory記憶體漲了。
這說明jvm的gc沒有把記憶體還給作業系統。
這個時候我以為tomcat的記憶體是不會降了,所以我想給tomcat設定乙個最大值不讓他漲。
這種方式我試了不生效,操作任務管理器顯示tomcat的虛擬記憶體始終在1024mb以內
開啟tomcat根目錄下的bin資料夾,編輯catalina.bat,將其中的%catalina_opts%(共有四處)替換為:-xms256m -xmx512m(這種方式生效)
提交大小就是分配的虛擬記憶體,tomcat啟動的記憶體也從500m降到了300m。
因為一直手動操作重新整理頁面比較累,所以想通過**迴圈訪問url,這樣我就知道tomcat記憶體到底能漲到多少。(這個時候我還原了tomcat的配置,所以虛擬記憶體是1024mb)
剛開始重新整理的時候,發現tomcat瘋狂的漲,不過也只是漲到800+mb了,然後開始慢慢往下掉了,最後掉到了300+mb。
我認為是tomcat的記憶體是達到了乙個臨界點,然後才開始把記憶體**並返還給作業系統了。
Tomcat記憶體設定
tomcat的啟動分為startupo.bat啟動和註冊為windows服務的啟動,下面一一說明。1.startup.bat啟動 set j a opts xms1024m xmx1024m xx permsize 256m xx maxnewsize 256m xx maxpermsize 256...
PostgreSQL記憶體使用增長觀察
說是記憶體增長,其實未必是。但是客戶有時候喜歡用free命令來檢視,為何更好地了解,進行以下試驗。執行postgresql前 root server free m total used free shared buffers cached mem 1125 660464026 363 buffers...
tomcat 結構分析
掌握 tomcat是web伺服器的一種,乙個tomcat就是乙個server服務,裡面可以有多個service服務,每個service服務主要由connector與container組成,同乙個service可以有多個不同種類的connector 乙個服務可以有多種連線,如同時提供http和http...