JVM的參數(shù)設(shè)置

參數(shù)解釋

-Xmx 指定最大堆 java虛擬機(jī)最多能夠使用多少堆空間

-Xms 指定最小堆 至少使用多少空間,只要java虛擬機(jī)啟動 ,這么多空間就會被占用

怎么設(shè)置

常見的機(jī)器配置是2核4G,或者是4核8G

如果我們用2核4G的機(jī)器來部署,那么還是有點緊湊的,因為機(jī)器有4G內(nèi)存,但是機(jī)器本身也要用一些內(nèi)存空間,最后你的JVM進(jìn)程最多就是2G內(nèi)存
然后這2G還得分配給方法區(qū)、棧內(nèi)存、堆內(nèi)存幾塊區(qū)域,那么堆內(nèi)存可能最多就是個1G多的內(nèi)存空間。

然后堆內(nèi)存還分為新生代和老年代,你的老年代總需要放置系統(tǒng)的一些長期存活的對象吧,怎么也得給幾百MB的內(nèi)存空間,那么新生代可能也就幾百MB的內(nèi)存了。
這樣的話,大家可以看到,我們上述的核心業(yè)務(wù)流程,只不過僅僅是針對一個支付訂單對象來分析的,但是實際上如果擴(kuò)大10倍~20倍換成對完整系統(tǒng)的預(yù)估之后,我們看到,大致每秒會占據(jù)1MB左右的內(nèi)存空間。

那么如果你新生代就幾百MB的內(nèi)存空間,是不是會導(dǎo)致運行幾百秒之后,新生代內(nèi)存空間就滿了?此時是不是就得觸發(fā)Minor GC了?

其實如果這么頻繁的觸發(fā)Minor GC,會影響線上系統(tǒng)的性能穩(wěn)定性的。
這里大家首先要明白的一點,就是頻繁觸發(fā)GC一定不是什么好事兒。

因此你可以考慮采用4核8G的機(jī)器來部署支付系統(tǒng),那么你的JVM進(jìn)程至少可以給4G以上內(nèi)存,新生代在里面至少可以分配到2G內(nèi)存空間

這樣子就可以做到可能新生代每秒多1MB左右的內(nèi)存,但是需要將近半小時到1小時才會讓新生代觸發(fā)Minor GC,這就大大降低了GC的頻率。

舉個例子:機(jī)器采用4核8G,然后-Xms和-Xmx設(shè)置為3G,給整個堆內(nèi)存3G內(nèi)存空間,-Xmn設(shè)置為2G,給新生代2G內(nèi)存空間。

而且假設(shè)你的業(yè)務(wù)量如果更大,你可以考慮不只部署3臺機(jī)器,可以橫向擴(kuò)展部署5臺機(jī)器,或者10臺機(jī)器,這樣每臺機(jī)器處理的請求更少,對JVM的壓力更小。

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

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