摘要:一發(fā)生故障今天發(fā)現(xiàn)服務(wù)查詢一直卡住,就看了一下服務(wù)器當(dāng)時(shí)就愣住了就這一個(gè)服務(wù)就把占滿了,再看了下端口號(hào)出現(xiàn)了大量的。
一、發(fā)生故障
今天發(fā)現(xiàn)服務(wù)查詢一直卡住,就看了一下服務(wù)器:
當(dāng)時(shí)就愣住了就這一個(gè)服務(wù)就把CPU占滿了,再看了下端口號(hào):
出現(xiàn)了大量的CLOSE_WAIT??吹竭@里我就只有一個(gè)想法:程序代碼有問題或者是配置的問題
二、排查為此我先重啟了服務(wù)并加上參數(shù)用jconsole查看服務(wù)狀況:
-Djava.rmi.server.hostname=xxx.xxx.xxx.xxx
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=10000
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
再打印GC日志:
-verbose:gc
-Xloggc:/usr/app/ydjAgent/gc_log
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
啟動(dòng)參數(shù)太長了我又把它添加到環(huán)境變量里:
vim /etc/profile
export JAVA_OPTS="-Xms1024m -Xmx4096m -Djava.rmi.server.hostname=120.0.0.1 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=10000 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -verbose:gc -Xloggc:/usr/app/ydjAgent/gc_log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps"
根據(jù)jconsole概覽和GC日志可以看的出,是因?yàn)橄到y(tǒng)頻繁進(jìn)行GC導(dǎo)致的:
一般情況下,young gc頻繁是正常的,full gc如果非常頻繁,一般情況下有問題的就是接口查詢中的集合的數(shù)據(jù),存起來了,一直沒刪除,導(dǎo)致gc沒有及時(shí)回收。
然后將堆信息dump下來后用Eclipse memory analyze分析了一下,發(fā)現(xiàn)char[]數(shù)組和byte[]數(shù)組占了大部分內(nèi)存。
綜上分析后查明,因?yàn)闃I(yè)務(wù)需要統(tǒng)計(jì)一個(gè)月內(nèi)的所有訂單中的商品以及品牌排行,因?yàn)樵斜淼脑O(shè)計(jì)的主鍵id是UUID,服務(wù)在啟動(dòng)的時(shí)候只給了最大4G內(nèi)存,即使是只查詢訂單id,都占了很大一部分空間,更別說后面查詢出來的訂單信息會(huì)占用更大的內(nèi)存空間,而因?yàn)檫@樣,數(shù)據(jù)庫的壓力和應(yīng)用的壓力也會(huì)很大,應(yīng)用一直處于FULL GC狀態(tài),把cpu占滿。
三、解決辦法因?yàn)樵搼?yīng)用和數(shù)據(jù)庫是在同一個(gè)服務(wù)器上,所以就先把應(yīng)用部署到另一個(gè)服務(wù)器上然后用nginx通過內(nèi)網(wǎng)將請(qǐng)求轉(zhuǎn)發(fā),把內(nèi)存設(shè)置8G,緩解原來服務(wù)器的CPU壓力,即便如此,在數(shù)據(jù)訪問的時(shí)候還是對(duì)數(shù)據(jù)庫造成了很大的壓力。因?yàn)槲掖a寫的太爛了哈哈。。事發(fā)之后先向老板做了匯報(bào),老板表示理解。。給我時(shí)間去重新設(shè)計(jì)原有的架構(gòu)。。。不說了寫代碼去。。。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/74324.html
摘要:年月日本文是關(guān)于記錄某次游戲服務(wù)端的性能優(yōu)化此處涉及的技術(shù)包括引擎隨著游戲?qū)肴藬?shù)逐漸增加單個(gè)集合的文檔數(shù)已經(jīng)超過經(jīng)常有玩家反饋說卡特別是在服務(wù)器遷移后從核降到核卡頓更嚴(yán)重了遂開始排查問題確認(rèn)服務(wù)器壓力首先使用命令查看總體情況此時(shí)占用不高 Last-Modified: 2019年6月13日11:08:19 本文是關(guān)于記錄某次游戲服務(wù)端的性能優(yōu)化, 此處涉及的技術(shù)包括: MongoDB...
摘要:年月日本文是關(guān)于記錄某次游戲服務(wù)端的性能優(yōu)化此處涉及的技術(shù)包括引擎隨著游戲?qū)肴藬?shù)逐漸增加單個(gè)集合的文檔數(shù)已經(jīng)超過經(jīng)常有玩家反饋說卡特別是在服務(wù)器遷移后從核降到核卡頓更嚴(yán)重了遂開始排查問題確認(rèn)服務(wù)器壓力首先使用命令查看總體情況此時(shí)占用不高 Last-Modified: 2019年6月13日11:08:19 本文是關(guān)于記錄某次游戲服務(wù)端的性能優(yōu)化, 此處涉及的技術(shù)包括: MongoDB...
摘要:當(dāng)然,如果你的核心數(shù)夠多,到個(gè)線程的并行度不滿足的話,也可以自定義一個(gè)線程池來執(zhí)行,不過這樣的話,要注意自己維護(hù)這個(gè)線程池的初始化,釋放等等操作了。 事情起源于一個(gè)bug排查,一個(gè)AsyncTask的子類,執(zhí)行的時(shí)候發(fā)現(xiàn)onPreExecute方法執(zhí)行了,doInBackground卻遲遲沒有被調(diào)用。懂AsyncTask一些表面原理的都知道,onPreExecute方法是在主線程執(zhí)行,...
閱讀 604·2023-04-26 01:39
閱讀 4725·2021-11-16 11:45
閱讀 2684·2021-09-27 13:37
閱讀 963·2021-09-01 10:50
閱讀 3705·2021-08-16 10:50
閱讀 2284·2019-08-30 15:55
閱讀 3067·2019-08-30 15:55
閱讀 2320·2019-08-30 14:07