簡體   English   中英

Java Tomcat 應用程序堆大小比二手堆大很多

[英]Java Tomcat application Heap size a lot larger then Used Heap

我正在開發一個 Java Webapp,它在帶有 Tomcat 的 1GB 內存服務器上運行。

最近我們注意到該應用程序占用了該服務器上的大部分內存 - 大約 83%。

我已經在我的個人機器上使用 VisualVM 對應用程序進行了分析,該機器有更多的 RAM。

VisualVM 顯示大約 400MB 的已用堆空間和高達 1.4GB 的已分配堆空間。

設置 -Xmx512m 允許我降低分配的堆空間,而不會對站點性能產生任何重大影響。

在此處輸入圖片說明

幾個問題:

  1. 這或多或少是正常的嗎? 為什么會這樣?
  2. 可以做些什么來減少內存消耗? 如果應用程序確實最終需要更多內存,則使用 -Xmx 來限制占用的內存量可能會成為問題。
  3. 如果操作系統需要另一個說 100mb 用於另一個進程,鑒於它沒有使用堆而只分配了堆,java 是否會釋放此內存供操作系統使用,或者操作系統是否會遇到內存問題?

按順序回答你的問題。

  1. 是的,這很正常。 例如,當您以最大堆為 2 gb 啟動服務器時,那么 2gb 是為 java 進程保留的。 應用程序可能會也可能不會完全使用它,但即使您在操作系統級別有更多可用內存,它也不能使用超過 2 GB,因為您將最大使用限制為 2 GB。 此外,應用程序使用更少的內存(僅 100 MB)是正常的,在這種情況下,使用的堆大小將遠小於總堆大小。
  2. 使用 -Xms 限制分配的內存,使用預期負載分析您的應用程序或以較低的負載開始,查看應用程序是否運行良好並分析內存使用情況。 您需要通過改變配置的內存並保留所有其他參數來運行多個測試。 多次運行之間的負載常數以找到最佳編號。
  3. 不,在服務器啟動之前,jvm 不會將內存釋放給另一個進程。 啟動服務器后,jvm 的最大內存配置將保留給 jvm 進程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM