JVM性能調優

78f6ef5a57ce42c6b236b566f0e3a828.jpg遇到以下情況,就需要考慮進行JVM調優了:

?

?

Heap內存(老年代)持續上漲達到設置的最大內存值;

?

Full GC 次數頻繁;

?

GC 停頓時間過長(超過1秒);

?

應用出現OutOfMemory 等內存異常;

?

應用中有使用本地緩存且占用大量內存空間;

?

系統吞吐量與響應性能不高或下降。

?

JVM調優的基本原則

JVM調優是一個手段,但并不一定所有問題都可以通過JVM進行調優解決,因此,在進行JVM調優時,我們要遵循一些原則:

?

大多數的Java應用不需要進行JVM優化;

?

大多數導致GC問題的原因是代碼層面的問題導致的(代碼層面);

?

上線之前,應先考慮將機器的JVM參數設置到最優;

?

減少創建對象的數量(代碼層面);

?

減少使用全局變量和大對象(代碼層面);

?

優先架構調優和代碼調優,JVM優化是不得已的手段(代碼、架構層面);

?

分析GC情況優化代碼比優化JVM參數更好(代碼層面);

?

通過以上原則,我們發現,其實最有效的優化手段是架構和代碼層面的優化,而JVM優化則是最后不得已的手段,也可以說是對服務器配置的最后一次“壓榨”。

?

JVM調優目標

調優的最終目的都是為了令應用程序使用最小的硬件消耗來承載更大的吞吐。jvm調優主要是針對垃圾收集器的收集性能優化,令運行在虛擬機上的應用能夠使用更少的內存以及延遲獲取更大的吞吐量。

?

延遲:GC低停頓和GC低頻率;

低內存占用;

高吞吐量;

其中,任何一個屬性性能的提高,幾乎都是以犧牲其他屬性性能的損為代價的,不可兼得。具體根據在業務中的重要性確定。

?

JVM調優量化目標

下面展示了一些JVM調優的量化目標參考實例:

?

Heap 內存使用率 <= 70%;

?

Old generation內存使用率<= 70%;

?

avgpause <= 1秒;

?

Full gc 次數0 或 avg pause interval >= 24小時 ;

?

注意:不同應用的JVM調優量化目標是不一樣的。

?

JVM調優的步驟

一般情況下,JVM調優可通過以下步驟進行:

?

分析GC日志及dump文件,判斷是否需要優化,確定瓶頸問題點;

?

確定JVM調優量化目標;

?

確定JVM調優參數(根據歷史JVM參數來調整);

?

依次調優內存、延遲、吞吐量等指標;

?

對比觀察調優前后的差異;

?

不斷的分析和調整,直到找到合適的JVM參數配置;

?

找到最合適的參數,將這些參數應用到所有服務器,并進行后續跟蹤。

?

以上操作步驟中,某些步驟是需要多次不斷迭代完成的。一般是從滿足程序的內存使用需求開始的,之后是時間延遲的要求,最后才是吞吐量的要求,要基于這個步驟來不斷優化,每一個步驟都是進行下一步的基礎,不可逆行之。

?

JVM參數

JVM調優最重要的工具就是JVM參數了。先來了解一下JVM參數相關內容。

?

-XX 參數被稱為不穩定參數,此類參數的設置很容易引起JVM 性能上的差異,使JVM存在極大的不穩定性。如果此類參數設置合理將大大提高JVM的性能及穩定性。

?

不穩定參數語法規則包含以下內容。

?

布爾類型參數值:

?

-XX:+<option> '+'表示啟用該選項

?

-XX:-<option> '-'表示關閉該選項

?

數字類型參數值:

?

-XX:<option>=<number>給選項設置一個數字類型值,可跟隨單位,例如:'m'或'M'表示兆字節;'k'或'K'千字節;'g'或'G'千兆字節。32K與32768是相同大小的。

字符串類型參數值:

?

-XX:<option>=<string>給選項設置一個字符串類型值,通常用于指定一個文件、路徑或一系列命令列表。例如:-XX:HeapDumpPath=./dump.core

JVM參數解析及調優

比如以下參數示例:

?

-Xmx4g –Xms4g –Xmn1200m –Xss512k -XX:NewRatio=4 -XX:SurvivorRatio=8 -XX:PermSize=100m -XX:MaxPermSize=256m -XX:MaxTenuringThreshold=15

?

?

上面為Java7及以前版本的示例,在Java8中永久代的參數-XX:PermSize和-XX:MaxPermSize已經失效。這在前面章節中已經講到。

?

參數解析:

?

-Xmx4g:堆內存最大值為4GB。

?

-Xms4g:初始化堆內存大小為4GB。

?

-Xmn1200m:設置年輕代大小為1200MB。增大年輕代后,將會減小年老代大小。此值對系統性能影響較大,Sun官方推薦配置為整個堆的3/8。

?

-Xss512k:設置每個線程的堆棧大小。JDK5.0以后每個線程堆棧大小為1MB,以前每個線程堆棧大小為256K。應根據應用線程所需內存大小進行調整。在相同物理內存下,減小這個值能生成更多的線程。但是操作系統對一個進程內的線程數還是有限制的,不能無限生成,經驗值在3000~5000左右。

?

-XX:NewRatio=4:設置年輕代(包括Eden和兩個Survivor區)與年老代的比值(除去持久代)。設置為4,則年輕代與年老代所占比值為1:4,年輕代占整個堆棧的1/5

?

-XX:SurvivorRatio=8:設置年輕代中Eden區與Survivor區的大小比值。設置為8,則兩個Survivor區與一個Eden區的比值為2:8,一個Survivor區占整個年輕代的1/10

?

-XX:PermSize=100m:初始化永久代大小為100MB。

?

-XX:MaxPermSize=256m:設置持久代大小為256MB。

?

-XX:MaxTenuringThreshold=15:設置垃圾最大年齡。如果設置為0的話,則年輕代對象不經過Survivor區,直接進入年老代。對于年老代比較多的應用,可以提高效率。如果將此值設置為一個較大值,則年輕代對象會在Survivor區進行多次復制,這樣可以增加對象再年輕代的存活時間,增加在年輕代即被回收的概論。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/214776.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/214776.shtml
英文地址,請注明出處:http://en.pswp.cn/news/214776.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

xtts和ogg不選擇?

不選擇ogg的理由&#xff1a; 1.需要在源端創建用戶賦權&#xff0c;啟用數據庫最小日志&#xff0c;附加日志等操作--對生產影響較大 2.外鍵約束過多&#xff0c;割接啟用可能很慢https://www.modb.pro/db/201126--割接停機時間影響 3.初始化配置expdp導出可能快照過舊&#x…

H3C網絡設備交換機風扇亮黃燈故障處理

H3C出現如下報錯信息: [H3C]fan prefer-direction slot 1 power%Jan 1 04:30:13:401 2013 H3C DEV/1/FAN_DIRECTION_NOT_PREFERRED: Fan 1 airflow direction is not preferred on slot 1, please check it. %Jan 1 04:30:13:404 2013 H3C DEV/1/FAN_DIRECTION_NOT_PREFERRED…

代碼隨想錄算法訓練營第四十八天 _ 動態規劃_198.打家劫舍、213.打家劫舍II、337.打家劫舍 III。

學習目標&#xff1a; 動態規劃五部曲&#xff1a; ① 確定dp[i]的含義 ② 求遞推公式 ③ dp數組如何初始化 ④ 確定遍歷順序 ⑤ 打印遞歸數組 ---- 調試 引用自代碼隨想錄&#xff01; 60天訓練營打卡計劃&#xff01; 學習內容&#xff1a; 198.打家劫舍 動態規劃五步曲&a…

深入理解JVM虛擬機第二十八篇:詳解JVM當中方法重寫的本質和虛方法表

&#x1f609;&#x1f609; 歡迎加入我們的學習交流群呀&#xff1a; ??1&#xff1a;這是孫哥suns給大家的福利&#xff01; ??2&#xff1a;我們免費分享Netty、Dubbo、k8s、Mybatis、Spring...應用和源碼級別的視頻資料 &#x1f96d;&#x1f96d;3&#xff1a;QQ群&a…

2022年拉丁美洲中東和非洲醫療機器人市場及全球概況報告

今天分享的是機器人系列深度研究報告&#xff1a;《2022年拉丁美洲中東和非洲醫療機器人市場及全球概況報告》。 &#xff08;報告出品方&#xff1a;Apollo Reports&#xff09; 報告共計&#xff1a;195頁 研究方法論 2.1通過桌面研究和內部存儲庫的假設 a)最初&#xff…

基于java的Redis工具類可緩存Object,list,set,map!!!

目錄 簡介&#xff1a;springboot redis啟動器redis配置&#xff1a;工具類 簡介&#xff1a; 添加redis啟動器&#xff0c;配置redis相關配置&#xff0c;使用工具類緩存數據 封裝的方法有&#xff1a;緩存Object,list,set,map類型數據的方法、獲取指定key的value、判斷指定k…

【LeetCode刷題】-- 118.楊輝三角

118.楊輝三角 class Solution {public List<List<Integer>> generate(int numRows) {List<List<Integer>> res new ArrayList<List<Integer>>();for(int i 0; i < numRows;i){List<Integer> ret new ArrayList<>();for(…

18.Java程序設計-基于Springboot的電影院售票系統的設計與實現

摘要 電影產業在當今社會中占據著重要地位&#xff0c;電影院作為觀影的主要場所&#xff0c;其售票系統的高效性和用戶體驗至關重要。本文基于Spring Boot框架設計并實現了一款電影院售票系統&#xff0c;旨在提高售票效率、優化用戶體驗&#xff0c;并解決傳統售票方式存在的…

PHP 之道(PHP The Right Way 中文版)

PHP 之道&#xff08;PHP The Right Way 中文版&#xff09;

我的NPI項目之Android 顯示 -- 背光的電路小知識

由于使用的高通平臺一直在演化&#xff0c;從SDM660,QCM4290,QCM4490再到QCM6490。產品的背光設計也是一直在迭代。 簡單羅列了一下所經歷的一些設計&#xff0c;簡單的背光也涉及到了很多學問。 先說有哪些類型&#xff1a; 1. SDM660上由PMIC提供了wled給背光, 透過驅動直…

軟件設計師——軟件工程(一)

&#x1f4d1;前言 本文主要是【軟件工程】——軟件設計師——軟件工程的文章&#xff0c;如果有什么需要改進的地方還請大佬指出?? &#x1f3ac;作者簡介&#xff1a;大家好&#xff0c;我是聽風與他&#x1f947; ??博客首頁&#xff1a;CSDN主頁聽風與他 &#x1f304…

FTR223限時回歸?經典三花再加金翅膀,CL500特別款亮相

FTR223可以說是非常經典的一款本田小攀爬車型了&#xff0c;之前我還有幸玩過一段時間&#xff0c;最近本田在泰國車展上展出了CL500的特別版&#xff0c;其中FTR223紀念版的版畫讓人眼前一亮&#xff0c;經典的白、紅、藍三色搭配讓人眼前一亮。 CL500這臺車在國內今年剛上市&…

筆記本電腦安裝了Ubuntu系統設置關蓋/合蓋不掛起/不睡眠

文章目錄 簡介通過gnome-tweaks設置通過更改登錄配置文件logind.conf設置參考資料 簡介 學習工作中需要用到筆記本安裝Ubuntu Linux系統&#xff0c;并且需要關蓋電腦不關機、不掛起且不睡眠。為此&#xff0c;本篇博客整理了兩種常規操作方式&#xff0c;并給了詳細的步驟&am…

Ubuntu20 USB 權限配置

// &#xff08;保姆級&#xff09;Ubuntu下的USB設備永久權限設備起別名方法 cd /etc/udev/rules.dsudo vim motor_control_usb.rules增加如下內容SUBSYSTEMS"usb", ATTRS{idVendor}"0483", ATTRS{idProduct}"2000", GROUP"edda", …

某信服 EDR 白程序DLL劫持

本文用到的白程序回復公眾號20231211進行獲取。 嗯… 記得去年HW的時候某信服給我裝的EDR一直沒卸載&#xff0c;不是不想卸載&#xff0c;是因為卸載要密碼&#xff0c;所以就擺爛了。。。。 找到EDR這個目錄&#xff0c;然后把目錄復制到虛擬機中&#xff0c;然后一個一個e…

相控與斬控交交調壓(THD的計算)

相控與斬控交交調壓&#xff08;THD的計算&#xff09;

LeetCode-1008. 前序遍歷構造二叉搜索樹【棧 樹 二叉搜索樹 數組 二叉樹 單調棧】

LeetCode-1008. 前序遍歷構造二叉搜索樹【棧 樹 二叉搜索樹 數組 二叉樹 單調棧】 題目描述&#xff1a;解題思路一&#xff1a;題目大致意思就是給定一個二叉樹的前序遍歷&#xff0c;求對應的二叉搜索樹。一種比較特殊的點是「二叉搜索樹」的中序遍歷的結果是【有序序列】&am…

【UE5】監控攝像頭效果(下)

目錄 效果 步驟 一、多攝像機視角切換 二、攝像頭自動旋轉巡視 三、攝像頭跟蹤拍攝 效果 步驟 一、多攝像機視角切換 1. 打開玩家控制器“MyPlayerController”&#xff0c;添加一個變量&#xff0c;命名為“BP_SecurityCameraArray”&#xff0c;類型為“BP_SecurityCa…

蛋仔派對巔峰對決驚奇舞臺必勝打法

Hello!大家好呀&#xff01;蛋仔派對我也開始玩啦&#xff01;本期我們發一個蛋仔派對巔峰對決驚奇舞臺的必勝打法吧&#xff01;&#xff08;題外話&#xff1a;我的蛋仔名叫做 酷影kuying 大家能加我的好友嗎&#xff1f;我是新手有老手能帶我上分嘛&#xff1f;…

第二十四章 STL-函數對象

一、函數對象 1、函數對象概念 概念&#xff1a; 重載函數調用操作符的類&#xff0c;其對象常稱為函數對象 函數對象使用重載的()時&#xff0c;行為類似函數調用&#xff0c;也叫仿函數 本質&#xff1a; 函數對象(仿函數)是一個類&#xff0c;不是一個函數 2、函數對…