線上jvm如何配置的?


1、這里采用4核8g的機器

-server -Xms4g -Xmx4g -Xss256k

-XX:PermSize=512m

-XX:MaxPermSize=512m

-XX:MaxTenuringThreshold=20
-XX:CMSInitiatingOccupancyFraction=80

-XX:+UseCMSInitiatingOccupancyOnly

-XX:+HeapDumpOnOutOfMemoryError

-XX:HeapDumpPath=/path/heap/dump.hprof

-XX:+PrintGCTimeStamps

-XX:+PrintGCDeatils

-XX:+PrintGCDeatils -Xloggc:<filename>

解釋:

-server:必須得加,因為你是服務端程序,用-server啟動較慢,但是啟動后性能會更好

 

-Xms4g:堆內存的初始大小是4g,一般我們線上常用的普通應用系統是48G的虛擬機,足夠了,所以一般堆內存給4g,稍微留點富裕,畢竟操作系統自己也要用內存的

 

-Xmx4g:堆內存的最大大小是4g,一般就是跟初始大小是一樣的,一般不建議設置比-Xms4g大,因為導致運行時動態增加堆內存,會有問題

 

-Xss256k:每個線程使用棧內存大小,這個一般設置成256k就差不多夠了,畢竟主要內存都是放堆里的,棧里就是一些變量什么的

 

-XX:PermSize=512m,這是永久代大小,這是放加載的類之類的東西的,一般設置512m是足夠了,太小了,有的時候在就是那種動態生成字節碼的場景下,可能會有問題

 

-XX:MaxPermSize=512m,這就是永久代的最大大小,一般就跟上面那個一樣就行了

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/heap/dump.hprof 出現oom的時候,把指定java進程的堆內存快照搞到一個指定的文件里去

 

-XX:+PrintGCTimeStamps-XX:+PrintGCDeatils-XX:+PrintGCDeatils -Xloggc:<filename> 讓線上系統定期打出來gc的日志,如果發現線上系統經常卡頓,可以立即去查看gc日志

 

 

-XX:MaxTenuringThreshold=20:這個就是說新生代里多少次沒回收掉就進入老年代

 

-XX:CMSInitiatingOccupancyFraction=80,設置老年代占用多大比例后觸發cms垃圾回收

 

-XX:+UseCMSInitiatingOccupancyOnly,這個跟上面那個參數配合起來使用,就是說僅僅使用上面指定的那個比例,否則不指定這個參數,jvm第一次使用上面那個比例后,后續會自動調整那個比例

 

2、盡可能的去調優一下jvm參數后,去壓測調節的參數進行內存使用數據分析

發現分析了一下生產環境的jvm的運行情況,非常好,並發量很低,幾十分鍾才一次young gc,存活的對象特別少,幾乎都在s區域,老年代幾乎沒什么對象,幾天或者幾周才發生一次full gc。

 

在自己本地單機部署,測試環境里,去壓測,每秒單機有500並發請求,去觀察jvm的運行情況,這個時候他會不會存在頻繁gc的問題,你就去調優一下,你就可以基於這個壓測的例子去說了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM