Java 內(nèi)存限制

1. Java內(nèi)存設(shè)置推薦參數(shù)

  • 堆內(nèi)存參數(shù):
    • -Xmx512m: 最大總堆內(nèi)存,推薦設(shè)置為物理內(nèi)存的1/4
    • -Xms512m: 初始總堆內(nèi)存,推薦和最大堆內(nèi)存一樣大(GC之后就不必調(diào)整堆內(nèi)存大?。?/li>
    • -Xmn192m: 年輕代堆內(nèi)存,官方推薦為整個(gè)堆的3/8
  • 永久代參數(shù)
    • -XX:PermSize=128m 堆的初始大小,一般設(shè)置為128m即可,原則為預(yù)留30%的空間
    • XX:MaxPermSize=128m:堆的最大大小,一般設(shè)置為128m即可,原則為預(yù)留30%的空間

2. 查看內(nèi)存使用

  • 查看JVM 的配置
java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'
  • 查看程序內(nèi)存占用
// 可以直接看到內(nèi)存及cpu占用
top
// 查看某一具體進(jìn)程程序
top -p pid


//  查看內(nèi)存占用
ps -aux|grep xxx

// 會(huì)打印當(dāng)前進(jìn)程詳細(xì)情況,內(nèi)存是VmRSS
cat /proc/pid/status 

3. 設(shè)置Java 內(nèi)存限制方法

  • 直接通過java 命令去執(zhí)行class文件的時(shí)候設(shè)置JVM參數(shù)
java -Xms512m -Xmx512m helloword
  • eclipse可以在eclipse.ini 配置文件中設(shè)置,也可以在eclipse執(zhí)行一個(gè)java類時(shí),通過右鍵的參數(shù)添加部分去設(shè)置
  • 一般的像tomcat,weblogic這些web容器,都是應(yīng)用jvm啟動(dòng)的,所以在他們的啟動(dòng)腳本中都會(huì)去調(diào)用JVM,就可以在他們的啟動(dòng)腳本中設(shè)置堆棧的大小
  • springboot 項(xiàng)目設(shè)置內(nèi)存限制
// 設(shè)置啟動(dòng)參數(shù)
java -Xms1g -Xmx2g -jar xxx.jar
  • 啟動(dòng)jvm 手動(dòng)設(shè)置內(nèi)存
// 每次jvm進(jìn)行垃圾回收時(shí)顯示內(nèi)存信息,jvm的堆內(nèi)存設(shè)為固定20M
java -verbose:gc -Xms20M -Xmx20M
  • 修改系統(tǒng)環(huán)境變量,設(shè)置JVM的JAVA_TOOL_OPTIONS
vi ~/.bashrc
 
export JAVA_TOOL_OPTIONS='-Xms30g -XMx30g'
 
source ~/.bashrc

注意:

  1. 設(shè)置內(nèi)存限制最好檢查一下物理內(nèi)存是否充足
  2. 另外注意一臺(tái)機(jī)器上多個(gè)jar應(yīng)用,建議分別各個(gè)程序的內(nèi)存限制
  3. 設(shè)置內(nèi)存限制防止程序超過系統(tǒng)物理最大限制內(nèi)存,從而被系統(tǒng)殺掉
  4. 限定的內(nèi)存不能低于程序正常需要,當(dāng)程序QPS大、耗內(nèi)存任務(wù)比較多,內(nèi)存限制不用設(shè)置過小
  5. 當(dāng)程序運(yùn)行時(shí)候超過程序的設(shè)置的內(nèi)存限制,會(huì)不斷的gc,如果還不夠,會(huì)讓該線程直接OOM,從而釋放內(nèi)存,然后如果此線程還不能回收,java會(huì)不斷的啟動(dòng)gc線程回收內(nèi)存,最后CPU飚滿,java應(yīng)用沒響應(yīng)
  6. -Xmx設(shè)置的是總堆內(nèi)存限制,但是JVM運(yùn)行過程中到底會(huì)向操作系統(tǒng)申請(qǐng)多少內(nèi)存,這個(gè)是由JVM在運(yùn)行過程中動(dòng)態(tài)決定的,我們無法設(shè)置,比如JVM本身對(duì)堆內(nèi)存管理,垃圾回收,動(dòng)態(tài)庫加載等等都不在堆內(nèi)存限制范圍內(nèi)
最后編輯于
?著作權(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ù)。

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