如何設(shè)置高并發(fā)系統(tǒng)的jvm堆內(nèi)存大小

要解決的問題

  • 系統(tǒng)要部署多少臺(tái)機(jī)器
  • 每臺(tái)機(jī)器的內(nèi)存空間
  • 每臺(tái)機(jī)器jvm堆內(nèi)存大小
  • jvm內(nèi)存空間要多少,才能支撐這么多對(duì)象的創(chuàng)建 不至于進(jìn)程直接奔潰

內(nèi)存壓力計(jì)算

  1. qps估算
    日活用戶數(shù)量、高峰期時(shí)段多久、用戶行為涉及到的接口、接口中創(chuàng)建的對(duì)象大小
    舉例:
    (1) 假設(shè)用戶系統(tǒng)高峰期 1w+qps 時(shí), jvm內(nèi)存要在一秒內(nèi)能容納下這一萬多個(gè)用戶信息實(shí)例
    (2) 每天100萬支付訂單的交易系統(tǒng),高峰期幾個(gè)小時(shí),平均到高峰期就是每秒100訂單左右,要能容納下這些訂單對(duì)象
    處理耗時(shí)比較長的場(chǎng)景會(huì)比較復(fù)雜,進(jìn)行minor gc的時(shí)候會(huì)有 qps * n * timeout 多個(gè)對(duì)象還存活著(n為接口一次處理過程產(chǎn)生的對(duì)象個(gè)數(shù))

  2. 計(jì)算每個(gè)對(duì)象的大小

  3. 處理流程耗時(shí)

  4. 然后計(jì)算出系統(tǒng)大概多久會(huì)進(jìn)行一次 minor gc(年輕代多久會(huì)塞滿)

對(duì)于高并發(fā)的系統(tǒng),如果請(qǐng)求耗時(shí)突然變成秒/十幾秒(或者有個(gè)別接口耗時(shí)久),就很容易進(jìn)入老年代: 系統(tǒng)并發(fā)較高 eden區(qū)很快就填滿,然后進(jìn)行 minor gc,慢接口引用的對(duì)象回收不掉,在多次minor gc后這些慢接口的對(duì)象就進(jìn)入到老年代了

實(shí)際場(chǎng)景

其實(shí)一般公司運(yùn)維提供的機(jī)器配置是固定的幾檔,如4核8G、8核16G 然后會(huì)有對(duì)應(yīng)的較為通用的jvm參數(shù)配置模板
而且線上服務(wù)情況錯(cuò)綜復(fù)雜、不會(huì)說一個(gè)時(shí)刻就只有一個(gè)鏈路在執(zhí)行,需要根據(jù)預(yù)期要抗的qps、目標(biāo)rt進(jìn)行壓測(cè),確定保證機(jī)器負(fù)載在健康水平下達(dá)到目標(biāo)需要多少臺(tái)機(jī)器,同時(shí)觀察gc情況,然后再具體根據(jù)minor gc stw、老年代增長速率、fullgc頻率和時(shí)長等進(jìn)行調(diào)整

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容