一次線上系統性能大優化

   隨着業務量的上增和系統運行的時長的增加,風控的流程執行服務出現了嚴重的超時問題,本次優化主要分爲三個方面

一.數據庫方面,在優化前每日早上9點高峯期數據庫服務網卡總是爆滿,網卡是前兆網卡,換算成流量是100M/s的,當時的數據庫TPS和QPS如下圖:

網卡監控如下圖:

從網卡流量監控上來看,主要是out佔比比較多,說明查詢的數據量傳輸佔比比較多,但最後排查這不是主要原因,因爲我們數據庫服務器是1主2從,在通過監控發現,2從節點的in佔比在50%左右,說明binlog文件比較大,然後通過dba進一步排查,發現有以下幾張表insert和update比較頻繁,如下圖:

而且監控磁盤的讀寫IO如下圖:

通過以上圖分析出實施方案,首先是加緩存,減輕數據庫查詢的壓力,其次是排查在insert時看是否有大字段,經過排查發現規則快照表有個大字段類型爲:longtext,而且實際存儲的數據爲大json,且還挺大的,通過優化這兩點果然奇蹟出現了,流量果然降下來了,如下圖:

 

以上就是數據庫方面的優化

二:應用層方面的優化,剛開始時總報dubbo provide提供端線程池滿了,最後發現有個業務代碼的線程池使用的隊列有點問題,後來我們就修改爲:

因爲SynchronousQueue這個隊列在線程池數滿時 他會從新啓動一個線程來執行任務,所以我們改爲了LinkedBlockingQueue從一定程度上講,可以限制併發的流量,優化完後的效果如下圖:

三:jvm方面的優化,當時線上jvm的配置及調整如下圖:

當時優化效果是從1個小時2次fullGC變爲1次fGC,當時調整這個的原因是因爲發現每次fgc時年老的都沒滿,但是永久代都快滿了

這次優化完fgc是減少了一半,但是規則執行哪兒還是有超時的,最後又把規則加載哪兒修改爲有變化時在從從新加載刷新,因爲加載規則哪兒是大量的字符串,目前線上是400多條的規則,這樣不停的刷新產生的結果是ygc也挺頻繁,最後把刷新這兒改了之後ygc時間減少了一半,具體的對比如下圖:

公司jvm監控截圖如下:

優化之後間隔2天發生了一次fGC,結果發現fgc耗時比較長

 

優化之前由永久代出發的fgc耗時如圖:

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章