JVM調(diào)優(yōu)的方法是什么

這篇文章主要介紹“JVM調(diào)優(yōu)的方法是什么”,在日常操作中,相信很多人在JVM調(diào)優(yōu)的方法是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”JVM調(diào)優(yōu)的方法是什么”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

創(chuàng)新互聯(lián)主要從事網(wǎng)站制作、網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)桑日,10余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792

了解JVM常用命令行參數(shù)

  • 標(biāo)準(zhǔn):-開頭,所有HotSpot都支持

  • 非標(biāo)準(zhǔn):-X開頭,特點(diǎn)版本HotSpot支持特定的命令

  • 不穩(wěn)定:-XX開頭,下個版本可能會取消的命令

java -version

java -X

調(diào)優(yōu)代碼:

public class OomTest {  public static void main(String[] args) {    List<byte[]> bytes= new ArrayList<>();    for(;;){      byte[] b=new byte[1024*1024];      bytes.add(b);    }  }}JDK14 java -XX:+PrintCommandLineFlags OomTest.java-XX:G1ConcRefinementThreads=8 -XX:GCDrainStackTargetSize=64 -XX:InitialHeapSize=268435456 -XX:MaxHeapSize=4294967296 -XX:MinHeapSize=6815736 -XX:+PrintCommandLineFlags -XX:ReservedCodeCacheSize=251658240 -XX:+SegmentedCodeCache -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseG1GC Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
JDK8 java -XX:+PrintCommandLineFlags OomTest.java-XX:InitialHeapSize=268435456 -XX:MaxHeapSize=4294967296 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC

GC 垃圾回收器模式選擇

科學(xué)計(jì)算:吞吐量,數(shù)據(jù)挖掘,吞吐量優(yōu)先的一般選擇:PS+PO

響應(yīng)時間:網(wǎng)站,API  G1

什么是調(diào)優(yōu)?(搞定了就重啟一次)

  1. 依據(jù)需求進(jìn)行JVM規(guī)劃和預(yù)調(diào)優(yōu)

  1. 優(yōu)化運(yùn)行JVM環(huán)境(慢,卡頓)

  1. 解決JVM運(yùn)行過程中出現(xiàn)的各種問題(OOM)

調(diào)優(yōu),從規(guī)劃開始

  • 調(diào)優(yōu),從業(yè)務(wù)場景開始,沒有場景調(diào)優(yōu)都是耍流氓

  • 無監(jiān)控,不調(diào)優(yōu)

  • 步驟

    1. 熟悉業(yè)務(wù)場景

      • 響應(yīng)時間,停頓時間【CMS,G1 ZGC】(需要給用戶做響應(yīng))

      • 吞吐量=用戶/(用戶時間+GC時間)【PS PO-默認(rèn)】

    1. 選擇回收器組合

    1. 計(jì)算內(nèi)存需求

    1. 選定CPU(越高越好)

    1. 設(shè)定年代大小,升級年齡

    1. 設(shè)定日志參數(shù)

    1. 觀察日志情況

     JVM調(diào)優(yōu)的方法是什么

通過top jstack 找出堆棧信息

# 第一步先top 找出 哪個java進(jìn)程占用率最高top#顯示如下PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND     24525 root      20   0 4909144 1.421g   6248 S   6.7 18.6  67:52.53 jsvc
# 第二步 使用top -Hp Pid 找出這個pid進(jìn)程里哪個線程占用率最高top -Hp 24525 顯然如下:PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND  24624 root      20   0 4917660 1.427g  14548 S  2.7 18.7   0:30.39 jsvc # 第三步使用jstack查找改進(jìn)程的堆棧信息,需要把top -Hp的PID轉(zhuǎn)換成16進(jìn)制printf '%x\n' 24624 輸出:66030# 使用jstack -l pid(進(jìn)程的)|grep 16進(jìn)制(top- Hp線程PID)查找堆棧jstack -l 24525 |grep 66030輸出堆棧信息,結(jié)合源碼進(jìn)行原因查找使用jmap分析java進(jìn)程的內(nèi)存占用分析使用jmap會導(dǎo)致系統(tǒng)STWjmap -histo 進(jìn)程ID |head 20jmap -dump:format=b,file=xxx pid /jmap -histo

工具:阿里arthas工具使用

java -jar arthas-boot.jar按數(shù)組選擇java進(jìn)程# 常用命令有1. dashboard :類似top命令實(shí)時檢控線程情況2. jvm :把當(dāng)前java進(jìn)程的jvm配置全部顯示出來(棧,堆內(nèi)存等等info)3. thread 可以跟個線程ID:查看所有線程列表信息,后面跟著線程ID,4. heapdump : 導(dǎo)出堆內(nèi)存情況,會導(dǎo)致stw使用jhat -J-mx512M xxx.hprof
5. redefine 熱替換,線上直接替換文件

 實(shí)際線上運(yùn)行的jvm參數(shù)(jdk8用的G1,堆內(nèi)存最大512m)

#!/bin/bash
SERVER_NAME=xx-xx-serverBUILD_NAME=master-202003042222-13cae098aBASE_DIR=/usr/local/xx/xxx-web-server
exec java \-Dfile.encoding=UTF-8 \-Dlogback.configurationFile=${BASE_DIR}/conf/logback.xml \-Xmx512m \-XX:+UseG1GC \-XX:MaxGCPauseMillis=100 \ # gc的清理間隔時間-XX:InitiatingHeapOccupancyPercent=35 \  # 啟動G1的堆空間占用比例-verbose:gc \        # 類加載詳細(xì)過程-XX:+PrintGCDetails \       # GC詳情-XX:+PrintGCDateStamps \      # 打印gc啟動時間的相對時間-XX:+PrintGCTimeStamps \    # 打印發(fā)送GC的時間-XX:+PrintGCApplicationStoppedTime \  #打印GC的stw停止時間-Xloggc:${BASE_DIR}/logs/jvm_gc.log \  #打印GClog-XX:ErrorFile=${BASE_DIR}/logs/jvm_err.log \ #打印Gc報錯log-XX:+HeapDumpOnOutOfMemoryError \    # 導(dǎo)出oom異常對dump異??煺?/code>-XX:HeapDumpPath=${BASE_DIR}/logs/jvm_dump_pid%p.hprof \-jar ${BASE_DIR}/bin/xxx-xx-server-${BUILD_NAME}.jar ${BASE_DIR}/conf/server.properties

到此,關(guān)于“JVM調(diào)優(yōu)的方法是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

分享名稱:JVM調(diào)優(yōu)的方法是什么
URL分享:http://muchs.cn/article8/piepop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、營銷型網(wǎng)站建設(shè)、定制網(wǎng)站外貿(mào)網(wǎng)站建設(shè)、電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)