成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

因為內(nèi)存溢出,我差點被優(yōu)化

存儲 數(shù)據(jù)管理
在 Java? 中,那就是 Out Of Memory?,導(dǎo)致了不合理的 GC ,那么如何去定位這個內(nèi)存溢出的呢?實際上如果是大公司,那么會有專業(yè)的運維人員去定位哪些程序?qū)е铝藘?nèi)存溢出,但是如果要是沒有專業(yè)的運維人員,那么你自己就得學(xué)會怎么去定位這個內(nèi)存溢出了。

作為一個技術(shù)博主,了不起不是在創(chuàng)作就是在創(chuàng)作的路上(當(dāng)然偶爾也會有點恰飯文~還指望大家多多支持),我們都知道,在寫代碼的過程中,業(yè)務(wù)邏輯很大程度上決定了你對業(yè)務(wù)的理解,但是解決問題,卻是你提升比較關(guān)鍵的地方,而了不起,卻差點因為這個內(nèi)存溢出,把自己給干優(yōu)化掉。

什么是內(nèi)存溢出

百度百科是這么解釋的:

內(nèi)存溢出(Out Of Memory?,簡稱OOM)是指應(yīng)用系統(tǒng)中存在無法回收的內(nèi)存或使用的內(nèi)存過多,最終使得程序運行要用到的內(nèi)存大于能提供的最大內(nèi)存。此時程序就運行不了,系統(tǒng)會提示內(nèi)存溢出,有時候會自動關(guān)閉軟件,重啟電腦或者軟件后釋放掉一部分內(nèi)存又可以正常運行該軟件,而由系統(tǒng)配置、數(shù)據(jù)流、用戶代碼等原因而導(dǎo)致的內(nèi)存溢出錯誤,即使用戶重新執(zhí)行任務(wù)依然無法避免

其實很簡單,在 Java? 中,那就是 Out Of Memory?,導(dǎo)致了不合理的 GC ,那么如何去定位這個內(nèi)存溢出的呢?實際上如果是大公司,那么會有專業(yè)的運維人員去定位哪些程序?qū)е铝藘?nèi)存溢出,但是如果要是沒有專業(yè)的運維人員,那么你自己就得學(xué)會怎么去定位這個內(nèi)存溢出了。

如何定位內(nèi)存溢出

一、定位占用CPU?最高的服務(wù) 1、先找到cpu占用比較高的進(jìn)程:top -c? 進(jìn)去后按Shift+P鍵

一般異常的進(jìn)程cpu的占用會很高,記錄下這進(jìn)程的PID

2、查看指定進(jìn)程cpu?情況:top -cp PID

查看此進(jìn)程占用cpu?最高的線程,記錄下線程的ppid?也可以將相關(guān)信息保存下來:top -Hp PID -o %CPU -n 1 >cpu.txt?到此,我們就找到的最占用cpu的進(jìn)程以及相關(guān)線程。

3.如果你已經(jīng)知道是你們的 Java? 程序?qū)е铝藘?nèi)存溢出,那么我們就得學(xué)會分析日志,一般在 Out Of Memory 的上方,我們都會有各種日志的輸出,來標(biāo)志現(xiàn)在這個時間點,我們的程序執(zhí)行了什么操作,導(dǎo)致了我們的這個內(nèi)存溢出,分析到這里,就輪到看代碼了。

檢查的內(nèi)容大致都有哪些地方呢?

在一個項目中,使用兩個數(shù)據(jù)庫連接,其中專用于發(fā)送短信的數(shù)據(jù)庫連接使用 DBCP? 連接池管理,用戶為不將短信發(fā)出,有意將數(shù)據(jù)庫連接用戶名改錯,使得日志中有許多數(shù)據(jù)庫連接異常的日志,一段時間后,就出現(xiàn) OutOfMemory? 錯誤。經(jīng)分析,這是由于 DBCP? 連接池 BUG? 引起的,數(shù)據(jù)庫連接不上后,沒有將連接釋放,最終使得D BCP? 報OutOfMemory 錯誤。

上面這是一個簡單的例子,比如還有其他的,代碼中是否有死循環(huán)或遞歸調(diào)用。是否有大循環(huán)重復(fù)產(chǎn)生新對象實體。檢查對數(shù)據(jù)庫查詢中,是否有一次獲得全部數(shù)據(jù)的查詢。一般來說,如果一次取十萬條記錄到內(nèi)存,就可能引起內(nèi)存溢出。這個問題比較隱蔽,在上線前,數(shù)據(jù)庫中數(shù)據(jù)較少,不容易出問題,上線后,數(shù)據(jù)庫中數(shù)據(jù)多了,一次查詢就有可能引起內(nèi)存溢出。因此對于數(shù)據(jù)庫查詢盡量采用分頁的方式查詢。

檢查List、MAP?等集合對象是否有使用完后,未清除的問題。List、MAP?等集合對象會始終存有對對象的引用,使得這些對象不能被GC回收。

比如我們這次內(nèi)存溢出,就是因為一個很簡答的導(dǎo)入功能,因為服務(wù)器給服務(wù)拆分的內(nèi)存只有2G,而程序也沒有專門的去處理,實施導(dǎo)入數(shù)據(jù)的時候,直接把100w的空數(shù)據(jù)從Excel中直接導(dǎo)入了,結(jié)果,直接導(dǎo)致了內(nèi)存溢出。那么我們應(yīng)該怎么去處理這個呢?

其實我們的比較簡單,就是直接限定了文件的大小,因為Excel 雖然很大,但是有數(shù)據(jù)量的就那么幾百行,100w行,都是空行數(shù)據(jù),還都識別了,所以處理方式就那么幾種,限制文件大小,限制讀取數(shù)據(jù)的時候不讀空行,因為畢竟內(nèi)存大小是已經(jīng)不允許我們做修改了,只能通過這個代碼業(yè)務(wù)層面來處理這個了。

如何解決內(nèi)存溢出呢?

內(nèi)存溢出的解決方案:

第一步,修改JVM?啟動參數(shù),直接增加內(nèi)存。(-Xms,-Xmx參數(shù)一定不要忘記加。)

第二步,檢查錯誤日志,查看OutOfMemory錯誤前是否有其它異常或錯誤。

第三步,對代碼進(jìn)行走查和分析,找出可能發(fā)生內(nèi)存溢出的位置。

重點排查以下幾點:

1.檢查對數(shù)據(jù)庫查詢中,是否有一次獲得全部數(shù)據(jù)的查詢。一般來說,如果一次取十萬條記錄到內(nèi)存,就可能引起內(nèi)存溢出。這個問題比較隱蔽,在上線前,數(shù)據(jù)庫中數(shù)據(jù)較少,不容易出問題,上線后,數(shù)據(jù)庫中數(shù)據(jù)多了,一次查詢就有可能引起內(nèi)存溢出。因此對于數(shù)據(jù)庫查詢盡量采用分頁的方式查詢。

2.檢查代碼中是否有死循環(huán)或遞歸調(diào)用。

3.檢查是否有大循環(huán)重復(fù)產(chǎn)生新對象實體。

4.檢查List、MAP?等集合對象是否有使用完后,未清除的問題。List、MAP?等集合對象會始終存有對對象的引用,使得這些對象不能被GC回收。

第四步,使用內(nèi)存查看工具動態(tài)查看內(nèi)存使用情況

圖片

一般的,使用的工具有很多,MAT?(Memory Analyzer Tool) 這個工具是一個比較好用的分析內(nèi)存的工具,還有 jmeter 這個壓力測試工具,可對特定接口進(jìn)行壓測,分析tps、響應(yīng)時間、CPU、內(nèi)存等性能指標(biāo)。

JConsole、JVisualVM? jdk 自帶可視化工具,可監(jiān)控CPU、內(nèi)存、線程等狀況。

責(zé)任編輯:武曉燕 來源: Java極客技術(shù)
相關(guān)推薦

2023-05-14 22:25:33

內(nèi)存CPU

2020-07-01 09:07:52

SQL索引語句

2021-01-30 10:58:29

React應(yīng)用程序開發(fā)

2020-08-07 07:54:08

代碼

2021-10-22 05:56:31

數(shù)據(jù)庫鎖表鎖定機(jī)制

2021-06-07 10:20:31

2019-12-16 08:47:04

Redis設(shè)計算法

2020-03-12 07:55:50

訪問量飆升DDoS

2020-07-13 08:40:48

同事代碼

2020-05-29 08:14:49

代碼Try-Catch程序員

2009-06-15 09:47:12

Java程序內(nèi)存溢出

2024-03-11 08:22:40

Java內(nèi)存泄漏

2020-11-18 09:56:46

Java開發(fā)代碼

2018-05-23 11:43:59

數(shù)據(jù)庫

2020-12-21 08:32:07

內(nèi)存性能優(yōu)化

2019-05-30 06:37:38

網(wǎng)絡(luò)故障網(wǎng)絡(luò)協(xié)議網(wǎng)絡(luò)

2013-08-02 10:06:36

Android內(nèi)存溢出

2021-07-05 22:09:53

面試官CollectionsJDK7

2022-12-08 09:34:26

開發(fā)操作

2024-09-09 09:41:03

內(nèi)存溢出golang開發(fā)者
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产第一页在线观看 | 国产精品久久国产精品 | 亚洲成av人片在线观看无码 | av在线天堂 | 人人草天天草 | 欧美日韩亚洲国产综合 | 欧美天堂一区 | 久久精品无码一区二区三区 | 福利片在线看 | 久久免费精品视频 | 男人的天堂久久 | 精品视频一区二区三区在线观看 | 毛片片| 在线观看日本高清二区 | 精品国产一区二区在线 | 伊人网在线播放 | 男女视频在线观看 | 一级欧美一级日韩片免费观看 | 国产精品久久久久久久午夜片 | 国产精品精品视频一区二区三区 | 国产精品无码专区在线观看 | 日本在线小视频 | 欧美舔穴| 久久精品视频在线观看 | 国产精品一区二区久久 | 国产小视频精品 | 亚洲欧美中文日韩在线v日本 | 麻豆久久久9性大片 | 99精品久久久久久 | 久久精品伊人 | 综合在线视频 | 亚洲精品视频免费观看 | 日韩中文字幕在线不卡 | 日韩午夜电影在线观看 | 一本色道精品久久一区二区三区 | 五月婷婷在线播放 | 亚洲视频不卡 | 欧美日韩国产在线 | 成人精品一区 | 国产成人精品一区二区三区在线 | 欧美成人a |