国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java內(nèi)存占用過高問題分析

這篇具有很好參考價(jià)值的文章主要介紹了Java內(nèi)存占用過高問題分析。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

  1. 這里我們創(chuàng)建一個(gè)springboot項(xiàng)目, 然后隨便寫一個(gè)contoller, 在這個(gè)controller中定義一個(gè)List集合, 然后再初始化的時(shí)候讓集合中10萬個(gè)字符串, 然后部署并啟動(dòng)項(xiàng)目(這里為了貼近實(shí)戰(zhàn), 我是在centos中啟動(dòng)的項(xiàng)目)

    Java內(nèi)存占用過高問題分析

  2. 進(jìn)入系統(tǒng), 使用top命令顯示系統(tǒng)中的進(jìn)程信息, 然后點(diǎn)擊H(大寫), 以內(nèi)存排序

    Java內(nèi)存占用過高問題分析

    這時(shí)我們看到, Java程序占用了5.5%的內(nèi)存

    前面VIRT列表示的是java申請(qǐng)了多少內(nèi)存, RES表示實(shí)際使用了多少內(nèi)存 這里的單位是k

    在這里主要是看一下概率情況, 同時(shí)拿到j(luò)ava程序的進(jìn)程編號(hào)

  3. jdk為我們提供了jmap工具, 這個(gè)工具可以幫助我們掃描java進(jìn)行當(dāng)前的內(nèi)存情況

    jmap的功能很多, 這里我們主要使用這個(gè)工具查看占用內(nèi)存最多的類型是什么

    #?這里稍微解釋一下, | 的作用是拼接多個(gè)命令, |后面的命令利用前面的命令的執(zhí)行結(jié)果繼續(xù)執(zhí)行
    jmap -histo:live 2249762 | head -20
    

    Java內(nèi)存占用過高問題分析

    num : 表示行號(hào), #instances 表示jvm中總共有這個(gè)數(shù)量的實(shí)例對(duì)象 #bytes表示這些實(shí)例對(duì)象總共占用了多少內(nèi)存(單位byte)

    我們看到, jvm中總共有124240個(gè)字符串對(duì)象, 顯然不太合理

    到這里, 我們其實(shí)僅僅能知道jvm中出現(xiàn)了大量不正常的字符串對(duì)象, 至于這些字符串在什么位置, 什么原因產(chǎn)生的還是一無所知

  4. 接下來, 我們需要具體看看是哪些字符串占用了內(nèi)存, 并且找出在引用關(guān)系, 看看是哪些對(duì)象在使用這些字符串

    jmap智能粗略的分析內(nèi)存問題, 如果想要更細(xì)致的分析內(nèi)存,比如說分析對(duì)象之間的引用關(guān)系, 可以使用jhat工具

    這個(gè)工具就需要們先將jvm內(nèi)存詳細(xì)信息導(dǎo)出到一個(gè)文件中,在使用jhat分析

    使用 jmap -dump:live,file=heap.bin 進(jìn)程編號(hào) 命令, 將jvm內(nèi)存導(dǎo)出到一個(gè)heap.bin文件中

    #?導(dǎo)出jvm結(jié)構(gòu)
    jmap -dump:live,file=heap.bin 2254420
    

    Java內(nèi)存占用過高問題分析

    #?使用jhat分析文件, jhat回啟動(dòng)一個(gè)服務(wù)器, 讓我們可以在網(wǎng)頁(yè)上查看信息, 默認(rèn)端口是7000
    #?如果想要修改端口, 可以使用 -port 端口號(hào)的方式修改 jhat -port 8088 heap.bin
    jhat heap.bin
    

    Java內(nèi)存占用過高問題分析

  5. 接下來我們就可以在瀏覽器中查看了 , 這里展示的內(nèi)存中的所有對(duì)象的類型

    Java內(nèi)存占用過高問題分析

    注意, 默認(rèn)顯示的是不包含jdk原生的類型的, 所以, String類型這里顯示不出來, 需要將頁(yè)面滑動(dòng)到最下面

    Java內(nèi)存占用過高問題分析

    All classes including platform: 顯示所有的類型,包含java原生的類型

    Show all members of the rootset: 顯示所有的根節(jié)點(diǎn)

    Show instance counts for all classes (including platform): 顯示所有的類型的實(shí)例對(duì)象數(shù)量,包含jdk原生的類型

    Show instance counts for all classes (excluding platform): 顯示所有的類型的實(shí)例對(duì)象數(shù)量,不包含jdk原生的類型

    Show heap histogram : 顯示堆內(nèi)存的統(tǒng)計(jì)信息, 其實(shí)這里就是上面 jmap -histo:live 命令展示的結(jié)果

    Show finalizer summary: 實(shí)現(xiàn)即將被回收的對(duì)象的信息

    Execute Object Query Language (OQL) query: 跳轉(zhuǎn)到oql執(zhí)行頁(yè)面, 可以讓我們使用類似于sql語句的形式查詢對(duì)象.

  6. 點(diǎn)擊 Show instance counts for all classes (including platform), 顯示所有類型的對(duì)象信息

    Java內(nèi)存占用過高問題分析

    這里我們看到, String類型的對(duì)象總共有128002個(gè)對(duì)象, 我們點(diǎn)擊去就可以看到具體的字符串對(duì)象信息了. 這里我們看到有許多重復(fù)的字符串信息, 大概就是問題所在

    Java內(nèi)存占用過高問題分析

    選擇其中一個(gè)對(duì)象,點(diǎn)擊進(jìn)去, 著重顯示的位置表示是當(dāng)前對(duì)象被那個(gè)對(duì)象引用著, 這里能看到, 當(dāng)前字符串被一個(gè)Object類型的數(shù)組引用著

    我們可以通過這個(gè)關(guān)系, 一層層的往上找, 知道找到們熟悉的對(duì)象

    Java內(nèi)存占用過高問題分析

    我們點(diǎn)擊之后, 可以進(jìn)入到這個(gè)數(shù)組的詳情頁(yè)面, 這里有一個(gè)問題, 因?yàn)閿?shù)組中的元素特別多, 當(dāng)我們進(jìn)入到數(shù)組的詳情頁(yè)面之后, 他的引用關(guān)系是顯示在頁(yè)面的最下面的, 讓我們查看起來非常麻煩, 而且,如果數(shù)據(jù)量過多(>百萬), 很有可能回引起頁(yè)面崩潰.

    所以, 這里我們可以使用oql語句直接查詢

    在主頁(yè)上有進(jìn)入oql語句的輸入頁(yè)面

    Java內(nèi)存占用過高問題分析

    Java內(nèi)存占用過高問題分析

    點(diǎn)擊查詢的結(jié)果, 進(jìn)入到ArrayList集合中, 我們終于看到了一個(gè)熟悉的類型: MyController

    也就是說, 這個(gè)包含大量字符串對(duì)象的數(shù)組, 其實(shí)MyController中的ArrayList集合中的數(shù)據(jù), 至此, 我么便可以結(jié)合源碼, 進(jìn)一步查詢問題的所在了

    Java內(nèi)存占用過高問題分析文章來源地址http://www.zghlxwxcb.cn/news/detail-487219.html

到了這里,關(guān)于Java內(nèi)存占用過高問題分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java進(jìn)程內(nèi)存占用過高,排查解決方法

    Java進(jìn)程內(nèi)存占用過高,排查解決方法 在Java應(yīng)用程序開發(fā)過程中,我們經(jīng)常會(huì)遇到Java進(jìn)程占用內(nèi)存過高的問題。這可能會(huì)導(dǎo)致系統(tǒng)性能下降、應(yīng)用程序崩潰甚至無法啟動(dòng)。本文將介紹一些常見的排查和解決方法,幫助您解決Java進(jìn)程內(nèi)存占用過高的問題。 檢查內(nèi)存泄漏 內(nèi)存泄

    2024年02月07日
    瀏覽(24)
  • Docker Desktop Vmmem內(nèi)存占用過高問題解決方案

    Docker Desktop Vmmem內(nèi)存占用過高問題解決方案

    內(nèi)存占用過高原因 主要原因是docker desktop的實(shí)現(xiàn)及基于wsl(Windows子系統(tǒng)),相當(dāng)于在Windows上同時(shí)開了一個(gè)虛擬機(jī),如果不對(duì)wsl的資源進(jìn)行限制,它將會(huì)極大的獲取系統(tǒng)資源.所以我們只需要對(duì)wsl的最大資源進(jìn)行限制即可 解決方案 修改wsl配置文件 官方地址 具體配置: 在用戶目錄創(chuàng)建

    2024年02月05日
    瀏覽(34)
  • Java應(yīng)用CPU占用過高問題排查

    測(cè)試環(huán)境CPU突然升高,日志查詢無異常,可以通過使用jvm的調(diào)試工具定位問題。 1.定位java服務(wù)進(jìn)程 2.定位java線程 3.定位代碼塊 1.定位進(jìn)程 獲取cpu占用高的進(jìn)程pid 2.定位線程 轉(zhuǎn)16進(jìn)制 3.定位代碼 目的:將當(dāng)前堆棧信息保存為文件,通過16進(jìn)制的TID查找問題所在的代碼塊;

    2024年02月12日
    瀏覽(22)
  • 解決mysql啟動(dòng)占用運(yùn)行內(nèi)存過高

    解決mysql啟動(dòng)占用運(yùn)行內(nèi)存過高

    方法1(選取于網(wǎng)絡(luò),針對(duì)自己的服務(wù)器沒起作用) 修改my.cnf參數(shù): 重啟mysql服務(wù)。我這里遇到的沒解決,不知道其他人能夠解決問題,物理 內(nèi)存300M以及虛擬內(nèi)存1G依舊,沒改善。 方法2:(解決了當(dāng)前自己遇到的問題) 要關(guān)閉 Performance Schema ,5.6默認(rèn)開啟的,該參數(shù)主要用

    2024年02月07日
    瀏覽(26)
  • SpringBoot 項(xiàng)目啟動(dòng)內(nèi)存占用過高優(yōu)化以及內(nèi)存查看

    在使用SpringBoot 開發(fā)過程中,發(fā)現(xiàn)不管是本地還是測(cè)試環(huán)境只要一啟動(dòng),動(dòng)不動(dòng)就占用1G內(nèi)存,然而本地和測(cè)試環(huán)境的訪問量卻并沒有多少,導(dǎo)致資源浪費(fèi); 2.1、啟動(dòng)命令示例(具體配置可根實(shí)際情況調(diào)整) nohup java -jar -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -Xms128m -Xmx128m -Xmn

    2024年02月03日
    瀏覽(17)
  • Linux中buff/cache內(nèi)存占用過高,手動(dòng)釋放內(nèi)存

    Linux中buff/cache內(nèi)存占用過高,手動(dòng)釋放內(nèi)存

    buff/cache內(nèi)存占用太高 我們?cè)谑褂胒ree -h或者(top命令)查看系統(tǒng)內(nèi)存的時(shí)候,有時(shí)間會(huì)發(fā)現(xiàn)buff/cache很高,如下圖:(可以看到總內(nèi)存就251G,buff/cache占用了174G) 什么是buff buff(Buffer Cache)是一種I/O緩存,用于內(nèi)存和硬盤的緩沖,是io設(shè)備的讀寫緩沖區(qū)。 什么是cache cache(Page

    2024年02月12日
    瀏覽(16)
  • docker占用內(nèi)存過高的解決方案

    docker占用內(nèi)存過高的解決方案

    環(huán)境:系統(tǒng)macOS13,芯片M1Pro,內(nèi)存16GB 在mac環(huán)境中運(yùn)行docker,則會(huì)出現(xiàn)內(nèi)存占用過高的情況,如下圖: ? 具體原因如下所介紹: ? 也就是說,docker是無法直接運(yùn)行在macOS中的,雖然它們都是類unix的。故而我猜測(cè)在每次運(yùn)行一個(gè)container容器時(shí),可能都會(huì)創(chuàng)建一個(gè)虛擬的Linux環(huán)境

    2024年02月12日
    瀏覽(30)
  • linux下的buff/cache內(nèi)存占用過高-手動(dòng)清除釋放內(nèi)存

    buff/cache內(nèi)存占用太高 我們?cè)谑褂胒ree -h或者(top命令)查看系統(tǒng)內(nèi)存的時(shí)候,有時(shí)間會(huì)發(fā)現(xiàn)buff/cache很高,如下圖: 可以看到占用了377M的內(nèi)存 什么是buff buff(Buffer Cache)是一種I/O緩存,用于內(nèi)存和硬盤的緩沖,是io設(shè)備的讀寫緩沖區(qū)。 什么是cache cache(Page Cache)是一種高速緩

    2024年02月07日
    瀏覽(18)
  • linux緩沖區(qū)(buff/cache)內(nèi)存占用過高解決辦法

    1.查看當(dāng)前內(nèi)存剩余 2.發(fā)現(xiàn)free剩余很少,buff/cache占用很高 3.安裝hcache查看誰在占用 3.發(fā)現(xiàn)是journal這個(gè)東西,這是linux系統(tǒng)日志,出現(xiàn)這種情況,一般是日志沒有配置好 查看配置文件 將Storage=persistent 重啟日志服務(wù) 手動(dòng)清理緩存區(qū) 再次free -m 查看

    2024年01月18日
    瀏覽(29)
  • Vmmem進(jìn)程(WSL)占用CPU或內(nèi)存資源過高的解決辦法

    Vmmem進(jìn)程(WSL)占用CPU或內(nèi)存資源過高的解決辦法

    ????????有沒有一瞬間,在開啟docker或打開虛擬機(jī)時(shí),內(nèi)存瞬間飚增,進(jìn)行查看進(jìn)程消耗是一個(gè)Vmmem的進(jìn)程在作祟,那么Vmmem是什么呢,又如何進(jìn)行限制呢! ????????Vmmem: 是一個(gè)系統(tǒng)合成的虛擬進(jìn)程,用于表示虛擬機(jī)小航的內(nèi)存和CPU資源。換句話說,您看到的Vmmem消耗

    2024年02月13日
    瀏覽(45)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包