[英]Sensible Xmx/GC defaults for a microservice with a small heap
在我的公司,我們正在嘗試使用基於JVM的微服務。 它們被設計為水平擴展,因此我們使用相當小的容器(最多2G堆,通常1-1.5G)運行每個實例的多個實例。 我們使用的JVM是1.8.0_40-b25。
每個這樣的實例通常處理高達100 RPS,最大內存分配率約為250 MB / s。
問題是:什么樣的GC可能是一個明智的默認開始? 到目前為止,我們使用CMS與Xms = Xmx(以避免在堆大小調整期間暫停)和Xms = Xmx = 1.5G。 結果很不錯 - 我們幾乎沒有看到任何主要的GC執行。
我知道G1可以給我更小的停頓(以總吞吐量為代價)但是AFAIK它需要更多的“呼吸”空間並且至少3-4G堆才能正常運行。
任何提示(除了Azul的Zing:D)?
提示#1: 做實驗 !
假設您的微服務至少部署在兩個節點上,在CMS上運行一個,在G1上運行另一個節點,看看響應時間是多少。
不太可能,但如果你能發現G1性能如此之好,需要原始簇大小的一半呢?
附注:
測量完整GC后保留的內存量。 添加到此每秒分配的內存量,並乘以2 - 10,具體取決於您希望有一個次要GC的頻率。 例如,每2秒或每10秒。
例如,假設您在完整的GC之后保留了最多500 MB,並且每隔幾秒就可以使用GC,那么您可以擁有500 MB + 2 * 250 MB或大約1 GB的堆。
RPS的數量並不重要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.