簡體   English   中英

Spring Web應用程序內存配置文件懷疑

[英]Spring web application memory profiling doubts

我有帶有top命令的Spring應用程序,該命令在Amazon EC2小型實例(1.7 GB RAM)上顯示以下數據-

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                  
 5019 ubuntu    20   0 1971m 446m  17m S  4.7 27.0  31:25.61 java    

僅用於啟動軟件就占用446 MB的內存,我大約有350個類,並且有一些庫由Maven引入為依賴項。

free -m 

             total       used       free     shared    buffers     cached
Mem:          1656       1642         14          0         34        519
-/+ buffers/cache:       1088        568
Swap:          895         12        883

Maven Spring依賴項在那里-

Spring Core, Spring MVC, Spring Data , Spring Data Rest, , Spring
Security, Spring HATEOAS, Spring Boot, Spring Oauth , Spring-Vaadin

我將這個內存占用量與jenkins總共需要277 MB進行了比較,但是我的測試應用程序顯然占用了+400 MB,而沒有運行任何東西。

此時,代碼只有實體和Spring Data Rest。 我進行了一個堆轉儲分析,結果表明休眠狀態占用了15 MB的PID作為應用程序的主要使用者(使用jmap進行獲取)

Used heap dump  76.9 MB
Number of objects   1,785,039
Number of classes   12,546
Number of class loaders 245
Number of GC roots  2,589
Format  hprof

MAT節目中最大的頂級Dominator類加載器報告-

org.eclipse.jetty.webapp.WebAppClassLoader @ 0xf00f8bb0  - 45 MB - 56.91%
  1. 將上述庫作為依賴項添加並使用mvn jetty:run運行時,Spring Web應用程序一般是否僅花費+400 MB即可啟動?
  2. 盡管top命令顯示+400 MB,但jmap此處的堆占用量顯示為77 MB,為什么它們不匹配,因為它們都是相同的PID 5019
  1. 僅憑庫就很難估算,因為它取決於您的jvm設置,如何處理應用程序,與引導程序相關的代碼是否有效地使用了內存等? 對於具有這些依賴性的應用程序,400mb聽起來很正常。

  2. 堆占用率只是代碼和庫使用的內存部分。 jvm也需要內存才能運行。 另外,您的操作系統在分配內存時可能會有其自身的復雜性。

您可以嘗試調整各種jvm堆內存設置(請參見http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html )。 一些非常常見的設置是-Xmx -Xms -XX:MaxPermSize。

我的建議是使用一些jvm分析工具,該工具會為您提供堆使用情況圖表(例如:visualvm),確保堆消耗不會增加(查找鋸齒狀圖形),然后您可以確定需要多少並進行調整VM參數。

暫無
暫無

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

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