java啟動(dòng)jar包修改JVM默認(rèn)內(nèi)存問(wèn)題
JVM默認(rèn)物理內(nèi)存
JVM初始分配的內(nèi)存由-Xms指定,默認(rèn)是物理內(nèi)存的1/64;JVM最大分配的內(nèi)存由-Xmx指定,默認(rèn)是物理內(nèi)存的1/4。
默認(rèn)空余堆內(nèi)存小于40%時(shí),JVM就會(huì)增大堆直到-Xmx的最大限制;空余堆內(nèi)存大于70%時(shí),JVM會(huì)減少堆直到-Xms的最小限制。
因此服務(wù)器一般設(shè)置-Xms、-Xmx相等以避免在每次GC后調(diào)整堆的大小。
設(shè)置JVM內(nèi)存的參數(shù)有四個(gè)
-XmxJava Heap最大值,默認(rèn)值為物理內(nèi)存的1/4,最佳設(shè)值應(yīng)該視物理內(nèi)存大小及計(jì)算機(jī)內(nèi)其他內(nèi)存開銷而定;
-XmsJava Heap初始值,Server端JVM最好將-Xms和-Xmx設(shè)為相同值,開發(fā)測(cè)試機(jī)JVM可以保留默認(rèn)值;
-XmnJava Heap Young區(qū)大小,不熟悉最好保留默認(rèn)值;
-Xss每個(gè)線程的Stack大小,不熟悉最好保留默認(rèn)值;
操作步驟
1.執(zhí)行命令:free -h
查詢當(dāng)前的內(nèi)存占用情況(Mem是當(dāng)前物理內(nèi)存使用情況,Swap是swap交換分區(qū)使用情況)
2.執(zhí)行命令:top
查看各個(gè)應(yīng)用的內(nèi)存占用情況
第一行:
10:51:46— 當(dāng)前系統(tǒng)時(shí)間
601days, 17:08— 系統(tǒng)已經(jīng)運(yùn)行了601天17小時(shí)8分鐘(在這期間沒有重啟過(guò))
1users — 當(dāng)前有1個(gè)用戶登錄系統(tǒng)
load average: 0.86, 0.73, 0.74 — load average后面的三個(gè)數(shù)分別是1分鐘、5分鐘、15分鐘的負(fù)載情況。
load average數(shù)據(jù)是每隔5秒鐘檢查一次活躍的進(jìn)程數(shù),然后按特定算法計(jì)算出的數(shù)值。如果這個(gè)數(shù)除以邏輯CPU的數(shù)量,結(jié)果高于5的時(shí)候就表明系統(tǒng)在超負(fù)荷運(yùn)轉(zhuǎn)了。
第二行:
Tasks — 任務(wù)(進(jìn)程),系統(tǒng)現(xiàn)在共有163個(gè)進(jìn)程,其中處于運(yùn)行中的有1個(gè),162個(gè)在休眠(sleep),stoped狀態(tài)的有0個(gè),zombie狀態(tài)(僵尸)的有0個(gè)。
3. 啟動(dòng)jar包
java -Xms1024m -Xmx1024m -Xmn700m -Xss16m -jar?xxx.jar &
-Xms1024m 設(shè)置JVM促使內(nèi)存為1024M。此值可以設(shè)置與-Xmx相同,以避免每次垃圾回收完成后JVM重新分配內(nèi)存。
-Xmx1024m ,設(shè)置JVM最大可用內(nèi)存為1024M。
-Xmn700m**:**設(shè)置年輕代大小為700M。整個(gè)堆大小=年輕代大小 + 年老代大小 + 持久代大小。持久代一般固定大小為64m,所以增大年輕代后,將會(huì)減小年老代大小。此值對(duì)系統(tǒng)性能影響較大,Sun官方推薦配置為整個(gè)堆的 3/8。
-Xss16m:
4. 如果是tomcat項(xiàng)目啟動(dòng)
則在bin目錄下,執(zhí)行命令:vim catalina.sh,然后在頂部加上:
JAVA_OPTS="-Xms1024m -Xmx1024m -Xmn700m -Xss16m"
重新啟動(dòng)項(xiàng)目之后,執(zhí)行命令查詢修改情況:jps -v
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot中的yml文件中讀取自定義配置信息及遇到問(wèn)題小結(jié)
這篇文章主要介紹了SpringBoot中的yml文件中讀取自定義配置信息,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06Java生成和解析XML格式文件和字符串的實(shí)例代碼
這篇文章主要介紹了Java生成和解析XML格式文件和字符串的實(shí)例代碼,需要的朋友可以參考下2014-02-02IDEA編譯時(shí)報(bào)常量字符串過(guò)長(zhǎng)的解決辦法
本文主要介紹了IDEA編譯時(shí)報(bào)常量字符串過(guò)長(zhǎng)的解決辦法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07Java面向?qū)ο缶幊讨^承和多態(tài)以及包的解析與使用范例
繼承就是可以直接使用前輩的屬性和方法。自然界如果沒有繼承,那一切都是處于混沌狀態(tài)。多態(tài)是同一個(gè)行為具有多個(gè)不同表現(xiàn)形式或形態(tài)的能力。多態(tài)就是同一個(gè)接口,使用不同的實(shí)例而執(zhí)行不同操作2021-11-11Java強(qiáng)制類型轉(zhuǎn)換原理詳解(父類轉(zhuǎn)子類、子類轉(zhuǎn)父類)
這篇文章主要給大家介紹了關(guān)于Java強(qiáng)制類型轉(zhuǎn)換原理(父類轉(zhuǎn)子類、子類轉(zhuǎn)父類)的相關(guān)資料,所謂的強(qiáng)制類型轉(zhuǎn)換,其實(shí)是自動(dòng)類型轉(zhuǎn)換的逆過(guò)程,在數(shù)據(jù)類型兼容的情況下,將容量大的數(shù)據(jù)類型轉(zhuǎn)換為容量小的數(shù)據(jù)類型,需要的朋友可以參考下2023-12-12java 一個(gè)類實(shí)現(xiàn)兩個(gè)接口的案例
這篇文章主要介紹了java 一個(gè)類實(shí)現(xiàn)兩個(gè)接口的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10Spring中@RequestMapping、@RestController和Postman
本文介紹了Spring框架中常用的@RequestMapping和@RestController注解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-10-10JNI實(shí)現(xiàn)最簡(jiǎn)單的JAVA調(diào)用C/C++代碼
這篇文章主要介紹了JNI實(shí)現(xiàn)最簡(jiǎn)單的JAVA調(diào)用C/C++代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08在Spring MVC中處理請(qǐng)求參數(shù)的方法總結(jié)
在Spring MVC中處理請(qǐng)求參數(shù)是通過(guò)使用各種注解來(lái)實(shí)現(xiàn)的,本文給大家介紹了在Spring MVC中處理不同類型請(qǐng)求參數(shù)的方法,并通過(guò)代碼講解的非常詳細(xì),需要的朋友可以參考下2024-08-08