<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í)用指南:解決 SpringBoot 多實(shí)例內(nèi)存不足問(wèn)題

          共 2910字,需瀏覽 6分鐘

           ·

          2024-08-15 07:33

          閱讀本文大概需要 4 分鐘。

          來(lái)自:juejin.cn/post/7303862023618707491

          推薦一個(gè)程序員編程資料站:
          http://cxyroad.com

          2024年IDEA最新激活方法
          后臺(tái)回復(fù):激活碼

          CSDN免登錄復(fù)制代碼插件下載:
          CSDN復(fù)制插件

          以下是正文。




          在生產(chǎn)環(huán)境中我們會(huì)遇到一些問(wèn)題,此文主要記錄并復(fù)盤一下當(dāng)時(shí)項(xiàng)目中的實(shí)際問(wèn)題及解決過(guò)程。

          背景簡(jiǎn)述

          最初系統(tǒng)上線后都比較正常風(fēng)平浪靜的。在系統(tǒng)運(yùn)行了一段時(shí)間后,業(yè)務(wù)量上升后,生產(chǎn)上發(fā)現(xiàn)java應(yīng)用內(nèi)存占用過(guò)高,服務(wù)器總共64G,發(fā)現(xiàn)每個(gè)SpringBoot占用近12G的內(nèi)存,我們項(xiàng)目采用微服務(wù)架構(gòu),有多個(gè)springboot應(yīng)用。一下子內(nèi)存就不夠用了,springboot出現(xiàn)假死了。
          由于當(dāng)時(shí)生產(chǎn)沒(méi)有截圖,我用本機(jī)模擬類似的情況。
          可以看到內(nèi)存基本被使用完了,為什么Java程序會(huì)占用這么大內(nèi)存呢?

          解決步驟

          step1:jps查看進(jìn)程ID或通過(guò)top
          step2:jmap -heap 進(jìn)程ID
          可以看到Java應(yīng)用的最大堆內(nèi)存是4G,當(dāng)時(shí)我們生產(chǎn)是64G的物理內(nèi)存,生產(chǎn)Java應(yīng)用的最大堆內(nèi)存是12G。
          • 最大堆大小(-Xmx):通常為物理內(nèi)存的1/4。
          • 初始堆大小(-Xms):通常為物理內(nèi)存的1/64。
          以下是Oracle官方對(duì)JVM默認(rèn)參數(shù)的詳細(xì)說(shuō)明:
          以下是對(duì)應(yīng)的譯文:
          默認(rèn)堆大小
          除非在命令行中指定了初始堆大小和最大堆大小,否則它們是根據(jù)計(jì)算機(jī)上的內(nèi)存量計(jì)算的。
          • 客戶端 JVM 默認(rèn)初始和最大堆大小
          默認(rèn)最大堆大小是物理內(nèi)存的一半(物理內(nèi)存大小不超過(guò) 192 兆字節(jié) (MB)),否則為物理內(nèi)存的四分之一(物理內(nèi)存大小不超過(guò) 1 千兆字節(jié) (GB))。
          例如,如果您的計(jì)算機(jī)有 128 MB 物理內(nèi)存,則最大堆大小為 64 MB,大于或等于 1 GB 物理內(nèi)存會(huì)導(dǎo)致最大堆大小為 256 MB。
          JVM 實(shí)際上不會(huì)使用最大堆大小,除非您的程序創(chuàng)建了足夠的對(duì)象來(lái)需要它。在 JVM 初始化期間分配的量要小得多,稱為初始堆大小。此量至少為 8 MB,否則為物理內(nèi)存的 1/64,最大物理內(nèi)存大小為 1 GB。
          分配給年輕代的最大空間量是總堆大小的三分之一。
          • 服務(wù)器 JVM 默認(rèn)初始和最大堆大小
          默認(rèn)初始堆大小和最大堆大小在服務(wù)器 JVM 上的工作方式與在客戶端 JVM 上的工作方式類似,只是默認(rèn)值可以更高。在 32 位 JVM 上,如果有 4 GB 或更多物理內(nèi)存,則默認(rèn)最大堆大小可達(dá) 1 GB。在 64 位 JVM 上,如果有 128 GB 或更多物理內(nèi)存,則默認(rèn)最大堆大小可達(dá) 32 GB。
          到這里基本上可以看出是運(yùn)維人員發(fā)布Java應(yīng)用時(shí)并沒(méi)有設(shè)置JVM參數(shù),而是使用默認(rèn)JVM參數(shù)。導(dǎo)致每個(gè)Java應(yīng)用占用過(guò)高。雖然是小問(wèn)題,但生產(chǎn)上每個(gè)Java占用12G內(nèi)存還是比較嚇人的。

          復(fù)盤


          一般內(nèi)存占用過(guò)大的排查思路
          在排查內(nèi)存占用過(guò)大的問(wèn)題時(shí),一般可以采取以下思路:
          • 檢查JVM參數(shù): 如果在生產(chǎn)環(huán)境中啟動(dòng)Spring Boot沒(méi)有設(shè)置JVM參數(shù),使用默認(rèn)的JVM配置,可能會(huì)導(dǎo)致性能問(wèn)題和資源浪費(fèi)。優(yōu)化JVM參數(shù),根據(jù)應(yīng)用程序的需求和服務(wù)器配置進(jìn)行調(diào)整。
          • 觀察內(nèi)存使用情況: 使用監(jiān)控工具或者操作系統(tǒng)提供的工具,觀察Java應(yīng)用的內(nèi)存使用情況,包括堆內(nèi)存、非堆內(nèi)存、垃圾回收等。
          • 分析GC: 如果發(fā)現(xiàn)內(nèi)存問(wèn)題,可以分析GC日志以了解垃圾回收的情況,包括頻率、時(shí)間等。
          • 合理設(shè)置堆內(nèi)存大小: 根據(jù)應(yīng)用程序的需求和服務(wù)器的物理內(nèi)存,合理設(shè)置堆內(nèi)存的大小,避免過(guò)大或過(guò)小導(dǎo)致性能問(wèn)題。
          • 考慮使用內(nèi)存分析工具: 使用工具如VisualVM、MAT等,對(duì)應(yīng)用程序進(jìn)行內(nèi)存分析,找出可能存在的內(nèi)存泄漏或者大對(duì)象。
          如果在生產(chǎn)環(huán)境中啟動(dòng)springboot沒(méi)有設(shè)置jvm參數(shù),使用默認(rèn)的JVM配置,可能會(huì)有以下幾個(gè)危害:
          • 默認(rèn)的JVM配置可能不適合你的應(yīng)用程序的性能需求和資源限制,導(dǎo)致內(nèi)存溢出、垃圾回收頻繁、性能下降等問(wèn)題。
          • 默認(rèn)的JVM配置可能會(huì)浪費(fèi)服務(wù)器的內(nèi)存資源,因?yàn)镴VM會(huì)根據(jù)物理內(nèi)存的大小來(lái)分配堆內(nèi)存的大小,而不是根據(jù)應(yīng)用程序的實(shí)際需求。
          因此,建議在生產(chǎn)環(huán)境中啟動(dòng)springboot時(shí),根據(jù)應(yīng)用程序的特點(diǎn)和服務(wù)器的配置,合理地設(shè)置JVM參數(shù),以提高應(yīng)用程序的性能和穩(wěn)定性,節(jié)省服務(wù)器的資源。
          <END>

          推薦閱讀:

          船新 IDEA 2024.2 正式發(fā)布,新特性真香!

          如何為開放平臺(tái)設(shè)計(jì)一個(gè)安全好用的OpenApi

               
          程序員在線工具站:cxytools.com

          推薦一個(gè)自己寫的工具站:http://cxytools.com,專為程序員設(shè)計(jì),包括時(shí)間日期、JSON處理、SQL格式化、隨機(jī)字符串生成、UUID生成、文本Hash...等功能,提升開發(fā)效率。

          ?戳閱讀原文直達(dá)!                                  朕已閱 

          瀏覽 34
          點(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>
                  国产色无码网站www色视频 | 青青草视频在线网站 | 亚洲一区在线免费观看 | 日本久久二区 | 91精品国产乱码久久久久久 |