2016-03-11 47 views
1

我們有一個託管在AWS雲中的tomcat應用程序。當我分析過去一個月的應用服務器的內存趨勢時,我發現了一些奇怪的東西。我們的服務器總共有15GB內存,7GB分配給HeapSize。我在監控系統中注意到內存利用率報告很高。當我深入挖掘時發現使用的內存是計算包括(mem_used =緩存內存+共享內存+緩衝內存),我們每天都會進行tomcat重啓,但是當我完全重啓系統時,我注意到內存利用率降低了,因爲系統重啓緩存。現在,令我困惑的部分是,tomcat停止/啓動應該釋放所有由JVM分配的內存,那麼爲什麼緩存只有在整個系統重新啓動後才能釋放。 tomcat是否在我們反彈之後刷新緩存?Tomcat應用程序不釋放緩存

回答

0

因爲您正在查看的緩存是操作系統而非Tomcat的緩存。只要有足夠的RAM,操作系統就會緩存Tomcat應用程序在文件系統上讀取的所有內容。

例如,您的Tomcat安裝的servlet-api.jar的內容可能會被緩存。對於操作系統級緩存,這些信息只是塊或頁面。如果RAM足夠,每個經常請求的塊都會留在緩存中。

Tomcat停止後,操作系統沒有清除這些信息,因爲緩存應該也有利於啓動。例如。如果重新啓動,JVM可執行文件將不會再從磁盤讀取。