<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          記一次真實(shí)的 Spring Boot 項(xiàng)目?jī)?yōu)化和 JVM 調(diào)優(yōu)

          共 2485字,需瀏覽 5分鐘

           ·

          2020-09-23 23:17

          ??Java大聯(lián)盟

          ? 致力于最高效的Java學(xué)習(xí)

          關(guān)注



          作者|星朝

          cnblogs.com/jpfss/p/9753215.html


          B 站搜索:楠哥教你學(xué)Java

          獲取更多優(yōu)質(zhì)視頻教程


          項(xiàng)目調(diào)優(yōu)

          作為一名工程師,項(xiàng)目調(diào)優(yōu)這事,是必須得熟練掌握的事情。在SpringBoot項(xiàng)目中,調(diào)優(yōu)主要通過(guò)配置文件和配置JVM的參數(shù)的方式進(jìn)行。


          一、修改配置文件


          關(guān)于修改配置文件application.properties。

          Spring Boot 項(xiàng)目詳細(xì)的配置文件修改文檔

          其中比較重要的有:

          server.tomcat.max-connections=0 # Maximum number of connections that the server accepts and processes at any given time.server.tomcat.max-http-header-size=0 # Maximum size, in bytes, of the HTTP message header.server.tomcat.max-http-post-size=0 # Maximum size, in bytes, of the HTTP post content.server.tomcat.max-threads=0 # Maximum number of worker threads.server.tomcat.min-spare-threads=0 # Minimum number of worker threads.


          二、JVM 調(diào)優(yōu)實(shí)戰(zhàn)


          1、未設(shè)置JVM參數(shù)的情況


          我現(xiàn)在有一個(gè)項(xiàng)目,默認(rèn)情況下,沒(méi)有設(shè)置任何Jvm參數(shù)。下面我來(lái)啟動(dòng)看一下。


          看一下堆棧分配:很明顯默認(rèn)的最大堆內(nèi)存分配了8個(gè)G。很明顯的不合理嘛。

          2、下面我們來(lái)設(shè)置下 JVM 參數(shù)


          例如要配置JVM這么一大段參數(shù):

          -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC1


          方式一:如果你用的是IDEA等開(kāi)發(fā)工具,來(lái)啟動(dòng)運(yùn)行項(xiàng)目,那么要調(diào)試JDK就方便太多了。只需要將參數(shù)值設(shè)置到VM options中即可。


          設(shè)置成功,我的GC日志和堆棧分配都已經(jīng)OK了。

          GC日志:



          堆棧分配:



          方式二:適用于在項(xiàng)目部署后,在啟動(dòng)的時(shí)候,采用腳本或者命令行運(yùn)行的時(shí)候設(shè)置。

          先在項(xiàng)目路徑下,給項(xiàng)目打包:清理就項(xiàng)目?

          mvn clean1

          打包新項(xiàng)目:

          mvn package -Dmaven.test.skip=true

          打包完成后進(jìn)入可運(yùn)行Jar包的路徑下:

          執(zhí)行啟動(dòng)設(shè)置Jvm參數(shù)的操作。

          $ java -jar -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC newframe-1.0.0.jar

          這個(gè)時(shí)候,你再看監(jiān)控,你就會(huì)發(fā)現(xiàn),已經(jīng)是Ok的了。堆棧都是按照啟動(dòng)時(shí)候,設(shè)置的Jvm參數(shù)啟動(dòng)的。


          關(guān)于這些設(shè)置的JVM參數(shù)是什么意思,請(qǐng)參考第二步中的oracle官方給出的調(diào)優(yōu)文檔。


          我在這邊簡(jiǎn)單說(shuō)一下:

          -XX:MetaspaceSize=128m (元空間默認(rèn)大小) -XX:MaxMetaspaceSize=128m (元空間最大大小)

          -Xms1024m (堆最大大小) -Xmx1024m (堆默認(rèn)大小) -Xmn256m (新生代大小) -Xss256k (棧最大深度大小) -XX:SurvivorRatio=8 (新生代分區(qū)比例 8:2)

          -XX:+UseConcMarkSweepGC (指定使用的垃圾收集器,這里使用CMS收集器) -XX:+PrintGCDetails (打印詳細(xì)的GC日志)

          知識(shí)點(diǎn):

          JDK8 之后把-XX:PermSize 和 -XX:MaxPermGen移除了,取而代之的是 -XX:MetaspaceSize=128m (元空間默認(rèn)大小) -XX:MaxMetaspaceSize=128m (元空間最大大小)

          JDK 8開(kāi)始把類(lèi)的元數(shù)據(jù)放到本地化的堆內(nèi)存(native heap)中,這一塊區(qū)域就叫Metaspace,中文名叫元空間。

          使用本地化的內(nèi)存有什么好處呢?最直接的表現(xiàn)就是java.lang.OutOfMemoryError: PermGen 空間問(wèn)題將不復(fù)存在,因?yàn)槟J(rèn)的類(lèi)的元數(shù)據(jù)分配只受本地內(nèi)存大小的限制,也就是說(shuō)本地內(nèi)存剩余多少,理論上Metaspace就可以有多大(貌似容量還與操作系統(tǒng)的虛擬內(nèi)存有關(guān)?

          這里不太清楚),這解決了空間不足的問(wèn)題。不過(guò),讓Metaspace變得無(wú)限大顯然是不現(xiàn)實(shí)的,因此我們也要限制Metaspace的大小:

          使用-XX:MaxMetaspaceSize參數(shù)來(lái)指定Metaspace區(qū)域的大小。

          JVM默認(rèn)在運(yùn)行時(shí)根據(jù)需要?jiǎng)討B(tài)地設(shè)置MaxMetaspaceSize的大小。


          推薦閱讀

          1、Spring Boot+Vue項(xiàng)目實(shí)戰(zhàn)

          2、B站:4小時(shí)上手MyBatis Plus

          3、一文搞懂前后端分離

          4、快速上手Spring Boot+Vue前后端分離


          楠哥簡(jiǎn)介

          資深 Java 工程師,微信號(hào)?southwindss

          《Java零基礎(chǔ)實(shí)戰(zhàn)》一書(shū)作者

          騰訊課程官方 Java 面試官今日頭條認(rèn)證大V

          GitChat認(rèn)證作者,B站認(rèn)證UP主(楠哥教你學(xué)Java)

          致力于幫助萬(wàn)千 Java 學(xué)習(xí)者持續(xù)成長(zhǎng)。




          有收獲,就點(diǎn)個(gè)在看?
          瀏覽 50
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美成人做爰高潮片免费看贝隆尼 | 激情国产高清在线 | 丰满人妻一区二区三区免费 | 国产在线小电影 | 日批在线免费看网站 |