成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

記一次線上頻繁FGC的事件和解決方式

Alliot / 2378人閱讀

摘要:直接顯示了一個疑似內(nèi)存泄漏的問題。然后分析文件給出的信息,發(fā)現(xiàn)一個叫的類。文件里面說的內(nèi)存泄漏的大概的意思就是說,這個類里面的存放的東西太多了,爆掉了。修改了代碼將調(diào)用的地方改成了單例。修改完線上跑了一段日子,后來也沒有出現(xiàn)過這樣的問題。

問題描述:

????早上去公司上班,突然就郵件一直報警,接口報異常,然后去查服務(wù)器的運行情況,發(fā)現(xiàn)java的cpu爆了.接著就開始排查問題

問題解決過程:

1.先服務(wù)器(centos7)上,使用了top和uptime命令,發(fā)現(xiàn)時java的cpu爆了,超過100%了,導(dǎo)致后續(xù)的服務(wù)無法正常提供;
2.調(diào)整了負(fù)載均衡,下掉了有問題的那幾臺機器;
3.使用jps找到了運行著的tomcat的pid,這里假設(shè)為10086;
4.使用jstat -gcutil 10086 500 10 (意思是對pid為10086的線程,每500ms顯示各分代的內(nèi)存使用情況), 這里給一下部分jvm的參數(shù)設(shè)置,如下:
可以看到對新生代使用的是ParNew收集器,對老年代使用的是CMS收集器,CMSInitiatingOccupancyFraction=80說明當(dāng)使用率超過80%的時候觸發(fā)垃圾回收。然后發(fā)現(xiàn),線上老年代一直超過80%的使用率,幾乎一秒不到就進(jìn)行了一次FGC,這么頻繁的FGC導(dǎo)致了服務(wù)無法正常運行;
5.使用jmap -histo 查看了是哪些對象的數(shù)量最多,如果參數(shù)是-histo:live的話,會在進(jìn)行一次FGC后,顯示當(dāng)前的使用數(shù)量最多的實例。查看后發(fā)現(xiàn)有大量的ConcurrentHashMap的Node節(jié)點實例,于是去代碼中搜索使用到ConcurrentHashMap的地方,有好幾處使用比較頻繁的地方,看了代碼后分析,可能是圖片上傳,下載的問題,但也不能斷定。
6.使用jmap -dump:format=b,file=/usr/local/tomcat/dump1將內(nèi)存的情況給拉下來.如下:
文件生成后,將dump1放入到eclipse的mat中進(jìn)行分析。直接顯示了一個疑似內(nèi)存泄漏的問題。然后分析dump文件給出的信息,發(fā)現(xiàn)一個叫IdleConnectionReaper的類。dump文件里面說的內(nèi)存泄漏的大概的意思就是說,IdleConnectionReaper這個類里面的ArrayList存放的東西太多了,爆掉了。如下:

從oss的jar包里面找到這個類以后,簡單的看一下這個類的構(gòu)成,如下:

通過查找一些官方的資料和源代碼的閱讀,發(fā)現(xiàn)這個是一個oss的守護線程,用來檢測上傳或者下載的工作線程,每60秒就會去檢查一下空閑的工作線程,并且將它們回收。然后它內(nèi)部有一個靜態(tài)的ArrayList,里面保存的是ossClient的鏈接,默認(rèn)是1024個。
7.所以大概原因找到了,就是ossClient的鏈接太多了,扛不住了,所以一直在進(jìn)行FGC,導(dǎo)致服務(wù)不可用了,最后找到相關(guān)的代碼,發(fā)現(xiàn)有個小方法里面在每次上傳或者下載的時候,都會去創(chuàng)建一個ossClient。修改了代碼將ossClient調(diào)用的地方改成了單例。修改完線上跑了一段日子,后來也沒有出現(xiàn)過這樣的問題。

總結(jié):

1.大量的請求,調(diào)用的地方要注意是否會導(dǎo)致內(nèi)存的大量消耗,盡可能使用池化技術(shù),單例等,減少創(chuàng)建,銷毀的系統(tǒng)開銷;
2.CMS 的幾個缺點,可以參考《深入java虛擬機》,對CPU占用會比較高,無法處理浮動垃圾,還有就是CMS使用的是標(biāo)記-清除算法,會導(dǎo)致大量的空間碎片,碎片過多的話,導(dǎo)致分配大對象很困難,所以不得不進(jìn)行FGC,也可能是這個原因?qū)е铝吮疚恼f的一直FGC的問題。解決方式:
-XX:+UseCMSCompactAtFullCollection:使用并發(fā)收集器時,開啟對年老代的壓縮(會整理內(nèi)存碎片,默認(rèn)是開啟的);
-XX:CMSFullGCsBeforeCompaction=0:上面配置開啟的情況下,這里設(shè)置多少次Full GC后,對年老代進(jìn)行壓縮,會使得FGC的時間變長,但是可以提升內(nèi)存空間的使用率,讓大對象可以更容易分配,而不需要多次FGC。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/73635.html

相關(guān)文章

  • 一次JVM調(diào)優(yōu)

    摘要:現(xiàn)象登入生產(chǎn)環(huán)境,使用命令因為這時候并沒有打的,所以只能觀察現(xiàn)象。其他的可以根據(jù)這個類推,是內(nèi)純的占用量。 前言 我們的游戲上線之初,經(jīng)常有玩家反饋卡,或者有網(wǎng)絡(luò)延遲等現(xiàn)象,造成用戶流失等現(xiàn)象,這時候我就想到是不是可能是之前的jvm配置有問題,或者存在內(nèi)存泄露等問題。 現(xiàn)象 登入生產(chǎn)環(huán)境,使用命令,因為這時候并沒有打gc的log,所以只能觀察現(xiàn)象。 jstat -gcutil 270...

    sugarmo 評論0 收藏0
  • 記一線上bug處理-mybatis一級緩存引起

    摘要:問題線上定時任務(wù)計算出的金額不對定位問題查看日志好像也執(zhí)行了但是金額為什么和數(shù)據(jù)庫的表里的不一致再查整個的定時任務(wù)日志日切日期 問題: 線上riskProvision定時任務(wù),計算出的金額不對 定位問題: 查看日志 4.13 riskProvision 2017-04-13 01:10:00.009 [org.springframework.scheduling.quartz....

    sean 評論0 收藏0
  • Excel大批量數(shù)據(jù)導(dǎo)入導(dǎo)出,如何做優(yōu)化?

    摘要:并且在對的抽象中,每一行,每一個單元格都是一個對象。對支持使用官方例子需要繼承,覆蓋方法,每讀取到一個單元格的數(shù)據(jù)則會回調(diào)次方法。概要Java對Excel的操作一般都是用POI,但是數(shù)據(jù)量大的話可能會導(dǎo)致頻繁的FGC或OOM,這篇文章跟大家說下如果避免踩POI的坑,以及分別對于xls和xlsx文件怎么優(yōu)化大批量數(shù)據(jù)的導(dǎo)入和導(dǎo)出。一次線上問題這是一次線上的問題,因為一個大數(shù)據(jù)量的Excel導(dǎo)出...

    Tecode 評論0 收藏0
  • 線上問題排查所引發(fā)思考

    摘要:直到有一天你會碰到線上奇奇怪怪的問題,如線程執(zhí)行一個任務(wù)遲遲沒有返回,應(yīng)用假死。正好這次借助之前的一次生產(chǎn)問題來聊聊如何排查和解決問題。本地模擬上文介紹的是線程相關(guān)問題,現(xiàn)在來分析下內(nèi)存的問題。盡可能的減少多線程競爭鎖。 showImg(https://segmentfault.com/img/remote/1460000015568421?w=2048&h=1150); 前言 之前或...

    levy9527 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<