Java內(nèi)存泄漏問題處理方法經(jīng)驗(yàn)總結(jié)
JVM問題,一般會有三種情況,目前遇到了兩種,線程溢出和JVM不夠用
1.線程溢出:unable to create new native thread
1.1問題描述:
系統(tǒng)在1月4號左右,突然發(fā)現(xiàn)會產(chǎn)生內(nèi)存溢出問題,從日志上看,錯誤信息為:

導(dǎo)致系統(tǒng)不能使用,對外不能相應(yīng),但是觀察gc等又處于正常情況,free 系統(tǒng)內(nèi)存也正常。開始重啟機(jī)器進(jìn)行解決,真正的原因查找,過程比較坎坷,經(jīng)歷也比較痛苦。
1.2 問題解決
- pstree查看線程數(shù),發(fā)現(xiàn)系統(tǒng)線程數(shù)不斷增長,直到OOM。
命令:pstree -p pid (對該項(xiàng)已經(jīng)加了監(jiān)控)
- 線程過多導(dǎo)致的內(nèi)存溢出,但是那里的線程過多呢?!
我們實(shí)現(xiàn)了ThreadFactory,通過它,給線程的加一個前綴。來標(biāo)記線程所屬。重現(xiàn)問題后,發(fā)現(xiàn)是task模塊的TaskScheduler的定時任務(wù)中,在方法內(nèi)使用
ExecutorService taskExecutor = Executors.newFixedThreadPool(nThreads);
taskExecutor.invokeAll(tasks);
導(dǎo)致回收不及時,發(fā)生了問題。
2.內(nèi)存溢出:老生代100%無法及時回收
2.1問題現(xiàn)象:
1月31號,中午中影突然所有的機(jī)器陸續(xù)出現(xiàn)不能工作的現(xiàn)象,日志中看不到OOM錯誤,但是不能訪問服務(wù),或者訪問非常的慢,觀察jmap -heap發(fā)現(xiàn)老生代占用達(dá)到99%以上(不同版本JDK顯示可能不一樣。)

2.2 問題解決:
1、查看對內(nèi)存使用情況,發(fā)現(xiàn)存在JVM堆內(nèi)存不能釋放的問題
- 命令:jmap -heap pid 此命令有時候,會執(zhí)行卡頓,不建議加監(jiān)控
- 語法:jmap - heap pid
2、進(jìn)一步查看gc回收情況,發(fā)現(xiàn)FGC頻率高,而且時間長,且回收不給力。
- 命令:jstat -gcutil pid
- 語法:jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]
3、查看JVM堆中具體有哪些對象。發(fā)現(xiàn)不正常,Byte數(shù)組占用過大。實(shí)例達(dá)到1億兩千萬,大小竟然有4g(3958M).同時,訂單、hibernate引擎、mysql結(jié)果集類實(shí)例都很多。
- 命令:jmap -histo
- 語法:jmap -histo[:live] pid
4、查看Mysql慢查詢,發(fā)現(xiàn)確實(shí)找達(dá)到問題原因。
命令1:mysql數(shù)據(jù)庫上查看,所有的。
命令2:查看當(dāng)前慢查詢
SELECT * from information_schema.`PROCESSLIST` ;(簡化版:show PROCESSLIST)
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
- Java DWR內(nèi)存泄漏問題解決方案
- macOS上使用gperftools定位Java內(nèi)存泄漏問題及解決方案
- Java內(nèi)存模型可見性問題相關(guān)解析
- 解決Java導(dǎo)入excel大量數(shù)據(jù)出現(xiàn)內(nèi)存溢出的問題
- 完美解決java讀取大文件內(nèi)存溢出的問題
- 詳解Java中synchronized關(guān)鍵字的死鎖和內(nèi)存占用問題
- 解析Java的JNI編程中的對象引用與內(nèi)存泄漏問題
- JAVA程序內(nèi)存溢出問題原因分析
- Java中典型的內(nèi)存泄露問題和解決方法
- 基于Java 數(shù)組內(nèi)存分配的相關(guān)問題
- Java 內(nèi)存安全問題的注意事項(xiàng)
相關(guān)文章
淺談springboot多模塊(modules)開發(fā)
這篇文章主要介紹了淺談springboot多模塊(modules)開發(fā),詳細(xì)的介紹了springboot多模塊的實(shí)現(xiàn),有興趣的可以了解一下2017-09-09
IDEA java出現(xiàn)無效的源發(fā)行版14解決方案
這篇文章主要介紹了IDEA java出現(xiàn)無效的源發(fā)行版14解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
plantuml畫圖實(shí)現(xiàn)代碼畫時序圖UML用例圖
這篇文章主要為大家介紹了plantuml畫圖實(shí)現(xiàn)代碼畫時序圖示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
Java實(shí)現(xiàn)利用廣度優(yōu)先遍歷(BFS)計(jì)算最短路徑的方法
這篇文章主要介紹了Java實(shí)現(xiàn)利用廣度優(yōu)先遍歷(BFS)計(jì)算最短路徑的方法,實(shí)例分析了廣度優(yōu)先遍歷算法的原理與使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-04-04

