国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Arthas協(xié)助MQ消費(fèi)性能優(yōu)化

這篇具有很好參考價(jià)值的文章主要介紹了Arthas協(xié)助MQ消費(fèi)性能優(yōu)化。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

背景

項(xiàng)目中使用AWS的SQS消息隊(duì)列進(jìn)行異步處理,QA通過壓測發(fā)現(xiàn)單機(jī)TPS在23左右,目標(biāo)性能在500TPS,所以需要對消費(fèi)邏輯進(jìn)行優(yōu)化,提升消費(fèi)速度。

目標(biāo)

消費(fèi)TPS從23提升到500

優(yōu)化流程

優(yōu)化的思路是先分析定位性能瓶頸,再針瓶頸進(jìn)行優(yōu)化。

性能定位

要定位性能,先要準(zhǔn)確評估每秒處理的消費(fèi)數(shù)量,以及處理每個(gè)消息過程中,每一步操作的耗時(shí),發(fā)現(xiàn)耗時(shí)大頭在哪里。

準(zhǔn)確評估消費(fèi)速度(TPS)

消費(fèi)消息的入口是AwsConsumer#doUpdateCoin,所以可以通過Arthas的monitor命令監(jiān)控方法的執(zhí)行TPS和RT。

>?monitor -c 1?AwsConsumer doUpdateCoin -n 1000

這個(gè)命令會統(tǒng)計(jì)doUpdateCoin的調(diào)用信息,每1秒打印一次結(jié)果,總共打印1000次。通過它能定量分析消費(fèi)的TPS,命令會返回以下信息。

監(jiān)控項(xiàng)

說明

timestamp 時(shí)間戳
class Java 類
method 方法(構(gòu)造方法、普通方法)
total 調(diào)用次數(shù)
success 成功次數(shù)
fail 失敗次數(shù)
rt 平均 RT
fail-rate 失敗率

這是一次調(diào)用的結(jié)果:

Arthas協(xié)助MQ消費(fèi)性能優(yōu)化,性能優(yōu)化,java,大數(shù)據(jù),jvm

Arthas協(xié)助MQ消費(fèi)性能優(yōu)化,性能優(yōu)化,java,大數(shù)據(jù),jvm

可以看到方法每秒執(zhí)行26次,平均執(zhí)行時(shí)間是179.44秒。從這里我們能得出兩個(gè)結(jié)論:

  1. TPS是26,的確不高
  2. AVT-RT在179.44ms,那么一個(gè)線程TPS約等于5。

因?yàn)镽T比較高,猜測在RT上還有優(yōu)化的空間,下面從每條消息消費(fèi)的過程,繼續(xù)看是否存在瓶頸。

查看每次處理的明細(xì)

要看每次請求的信息,可以通過tt命令,它會采集方法每次執(zhí)行的耗時(shí)、成功還是失敗。

>?tt -t?AwsConsumer doUpdateCoin -n 1000

表格字段

字段解釋

INDEX 時(shí)間片段記錄編號,每一個(gè)編號代表著一次調(diào)用,后續(xù) tt 還有很多命令都是基于此編號指定記錄操作,非常重要。
TIMESTAMP 方法執(zhí)行的本機(jī)時(shí)間,記錄了這個(gè)時(shí)間片段所發(fā)生的本機(jī)時(shí)間
COST(ms) 方法執(zhí)行的耗時(shí)
IS-RET 方法是否以正常返回的形式結(jié)束
IS-EXP 方法是否以拋異常的形式結(jié)束
OBJECT 執(zhí)行對象的hashCode(),注意,曾經(jīng)有人誤認(rèn)為是對象在 JVM 中的內(nèi)存地址,但很遺憾他不是。但他能幫助你簡單的標(biāo)記當(dāng)前執(zhí)行方法的類實(shí)體
CLASS 執(zhí)行的類名
METHOD 執(zhí)行的方法名

這是一次調(diào)用的結(jié)果:

Arthas協(xié)助MQ消費(fèi)性能優(yōu)化,性能優(yōu)化,java,大數(shù)據(jù),jvm

Arthas協(xié)助MQ消費(fèi)性能優(yōu)化,性能優(yōu)化,java,大數(shù)據(jù),jvm

從這里可以看出,消息處理耗時(shí)有的大,有的小,說明處理性能不穩(wěn)定。需要再深入看RT較大的消息耗時(shí)在哪里。

處理一條消息的內(nèi)部耗時(shí)

要看單次處理過程中,每個(gè)步驟的耗時(shí),一般我們會通過在代碼前后記錄時(shí)間,再用日志打印出來。例如:long?s?=?System.currentTimeMillis();

這種方式效率很低,需要不斷加日志,并重新部署服務(wù)。Arthas有一個(gè)trace命令,可以查看方法的調(diào)用棧信息,包括調(diào)用的方法和方法執(zhí)行的耗時(shí)。

>?trace?AwsConsumer doUpdateCoin '#cost > 100' -n 1

這是一次調(diào)用的結(jié)果:

Arthas協(xié)助MQ消費(fèi)性能優(yōu)化,性能優(yōu)化,java,大數(shù)據(jù),jvmArthas協(xié)助MQ消費(fèi)性能優(yōu)化,性能優(yōu)化,java,大數(shù)據(jù),jvm

?文章來源地址http://www.zghlxwxcb.cn/news/detail-678592.html

這個(gè)命令會打印doUpdateCoin耗時(shí)大于100ms的請求調(diào)用棧信息,可以看到doUpdateCoin方法執(zhí)行了323ms,其中99.62%的耗時(shí)集中在PlayerService:loadByOpenId()方法調(diào)用。然后我們就會想看一下loadByOpenId方法到底什么地方耗時(shí)。

trace命令不能直接指定調(diào)用棧的層級,可以通過動態(tài)trace的方式,再創(chuàng)建一個(gè)listener去監(jiān)聽loadByOpenId方法,這樣會把第二個(gè)listener的結(jié)果打印在前面的trace結(jié)果上。

> trace PlayerService loadByOpenId --listenerId 9

Arthas協(xié)助MQ消費(fèi)性能優(yōu)化,性能優(yōu)化,java,大數(shù)據(jù),jvmArthas協(xié)助MQ消費(fèi)性能優(yōu)化,性能優(yōu)化,java,大數(shù)據(jù),jvm

?

可以看到,在原來的結(jié)果上多了loadByOpenId方法調(diào)用的明細(xì)。也發(fā)現(xiàn)了loadByOpenId方法耗時(shí)集中在load方法上,這是ORM框架提供的方法,直接去查詢數(shù)據(jù)庫。所以基本可以斷定,本次處理慢是由于這個(gè)查詢引起的。后面就是看查詢條件是沒有命中索引導(dǎo)致了慢,還是數(shù)據(jù)庫本身性能存在問題。

總結(jié)

因?yàn)楸敬螇簻y是在測試數(shù)據(jù)庫,所以數(shù)據(jù)庫本身不穩(wěn)定,雖然定位到了這個(gè)性能瓶頸,對消費(fèi)邏輯優(yōu)化幫助不大,需要更精準(zhǔn)的評估線上數(shù)據(jù)庫的性能。但是通過monitor命令長時(shí)間觀察doUpdateCoin方法的執(zhí)行情況,發(fā)現(xiàn)大部分時(shí)間平均RT其實(shí)是比較低的,所以不應(yīng)該是單次請求慢而降低了總體的消費(fèi)TPS??赡苁且?yàn)镾QS消息拉取階段存在瓶頸,所以嘗試加大了消費(fèi)的線程數(shù)、將單條拉取改成批量拉取。重新壓測后,消費(fèi)TPS從23提升到了342。

Arthas協(xié)助MQ消費(fèi)性能優(yōu)化,性能優(yōu)化,java,大數(shù)據(jù),jvmArthas協(xié)助MQ消費(fèi)性能優(yōu)化,性能優(yōu)化,java,大數(shù)據(jù),jvm

?Arthas協(xié)助MQ消費(fèi)性能優(yōu)化,性能優(yōu)化,java,大數(shù)據(jù),jvm

?

到了這里,關(guān)于Arthas協(xié)助MQ消費(fèi)性能優(yōu)化的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • java性能安全:OOM問題排查、Arthas分析高CPU問題、防止Dos攻擊

    一、OOM問題 分析流程: 第一步:進(jìn)程分析,分析老年代回收次數(shù)和消耗時(shí)間 第二步:日志分析,找出OOM發(fā)生時(shí)間的日志來鎖定執(zhí)行方法,對應(yīng)的機(jī)器ip 第三步:找到對應(yīng)的ip機(jī)器查看,進(jìn)一步分析 第四步:下載的dump,使用mat分析堆內(nèi)存,找到堆占用率前3,查看堆指向 問題

    2024年02月03日
    瀏覽(45)
  • kafka消費(fèi)、生產(chǎn)性能問題分析及優(yōu)化方法

    問題分析:將代碼邏輯注釋掉,直進(jìn)行拉取數(shù)據(jù)操作,性能應(yīng)為每分鐘產(chǎn)生消息的2倍以上

    2024年02月07日
    瀏覽(40)
  • JVM-性能優(yōu)化工具 MAT

    JVM-性能優(yōu)化工具 MAT

    MAT( Memory Analyzer Tool )工具是一款功能強(qiáng)大的 ]ava 堆內(nèi)存分析器??梢杂糜诓檎覂?nèi)存泄漏以及查看內(nèi)存消耗情況。MAT是基于 Eclipse 開發(fā)的,不僅可以單獨(dú)使用,還可以作為插件的形式嵌入在 Eclipse 中使用。是一款免費(fèi)的性能分析工具,使用起來非常方便。 https://www.eclipse.

    2024年02月11日
    瀏覽(17)
  • JVM 診斷神器-Arthas實(shí)戰(zhàn)

    JVM 診斷神器-Arthas實(shí)戰(zhàn)

    阿里開源的Java診斷工具,它可以在運(yùn)行時(shí)對Java應(yīng)用程序進(jìn)行動態(tài)診斷和調(diào)試 當(dāng)你遇到以下類似問題而束手無策時(shí), Arthas 可以幫助你解決 這個(gè)類從哪個(gè) jar 包加載的?為什么會報(bào)各種類相關(guān)的 Exception? 我改的代碼為什么沒有執(zhí)行到?難道是我沒 commit?分支搞錯(cuò)了? 遇到問

    2024年02月07日
    瀏覽(18)
  • 常見JVM參數(shù)配置和GC性能優(yōu)化

    常見的JVM參數(shù)配置 垃圾回收統(tǒng)計(jì)信息 -XX:+PrintGC ? ? 打印GC簡要信息 -XX:+PrintGCDetails打印GC的詳細(xì)信息 -XX:+PrintGCTimeStamps打印CG發(fā)生的時(shí)間戳 -Xloggc:log/gc.log 指定GC log的位置,以文件輸出 -XX:+PrintHeapAtGC 每一次GC前和GC后,都打印堆信息。 堆設(shè)置 -Xms:初始堆大,最小堆 -Xmx:最大

    2024年02月16日
    瀏覽(24)
  • 用Arthas快速定位線上JVM問題!

    用Arthas快速定位線上JVM問題!

    ? ? ? ?對于FullGC那一定不會陌生,一般來說會采用橫切FullGC前置攔截(-XX:+HeapDumpBeforeFullGC)和后置攔截(-XX:+HeapDumpAfterFullGC),導(dǎo)出FullGC發(fā)生前后的heap dump文件,以便于我們進(jìn)行FullGC原因的分析和定位。 ? ? ? ?我們?nèi)绻M梢杂^測到相關(guān)的GC回收次數(shù)以及相關(guān)的時(shí)間,

    2024年02月16日
    瀏覽(25)
  • JVM-Arthas高效的監(jiān)控工具

    JVM-Arthas高效的監(jiān)控工具

    一、arthas介紹 3.選擇監(jiān)控哪個(gè)進(jìn)程 4.進(jìn)入具體進(jìn)程 二、arthas的基礎(chǔ)命令與基本操作 1.查詢包含Java的系統(tǒng)屬性: 命令:sysprop |grep java 1.查詢不含Java的系統(tǒng)屬性: 命令:sysprop | grep -v java 3.打印歷史命令 命令:history 4.查看當(dāng)前工作目錄 命令:pwd 三、如何使用arthas監(jiān)控線上服務(wù)

    2024年01月23日
    瀏覽(21)
  • JVM性能優(yōu)化 —— 類加載器,手動實(shí)現(xiàn)類的熱加載

    JVM性能優(yōu)化 —— 類加載器,手動實(shí)現(xiàn)類的熱加載

    每個(gè)編寫的”.java”拓展名類文件都存儲著需要執(zhí)行的程序邏輯,這些”.java”文件經(jīng)過Java編譯器編譯成拓展名為”.class”的文件,”.class”文件中保存著Java代碼經(jīng)轉(zhuǎn)換后的虛擬機(jī)指令,當(dāng)需要使用某個(gè)類時(shí),虛擬機(jī)將會加載它的”.class”文件,并創(chuàng)建對應(yīng)的class對象,將c

    2024年02月08日
    瀏覽(20)
  • 【業(yè)務(wù)功能篇86】微服務(wù)-springcloud-系統(tǒng)性能壓力測試-jmeter-性能優(yōu)化-JVM參數(shù)調(diào)優(yōu)

    【業(yè)務(wù)功能篇86】微服務(wù)-springcloud-系統(tǒng)性能壓力測試-jmeter-性能優(yōu)化-JVM參數(shù)調(diào)優(yōu)

    ??壓力測試是給軟件不斷加壓,強(qiáng)制其在極限的情況下運(yùn)行,觀察它可以運(yùn)行到何種程度,從而發(fā)現(xiàn)性能缺陷,是通過搭建與實(shí)際環(huán)境相似的測試環(huán)境,通過測試程序在同一時(shí)間內(nèi)或某一段時(shí)間內(nèi),向系統(tǒng)發(fā)送預(yù)期數(shù)量的交易請求、測試系統(tǒng)在不同壓力情況下的效率狀況,

    2024年02月10日
    瀏覽(15)
  • Java中處理千萬級數(shù)據(jù)的最佳實(shí)踐:性能優(yōu)化指南

    在今天的數(shù)字化時(shí)代,處理大規(guī)模數(shù)據(jù)已經(jīng)成為許多Java應(yīng)用程序的核心任務(wù)。無論您是構(gòu)建數(shù)據(jù)分析工具、實(shí)現(xiàn)實(shí)時(shí)監(jiān)控系統(tǒng),還是處理大規(guī)模日志文件,性能優(yōu)化都是確保應(yīng)用程序能夠高效運(yùn)行的關(guān)鍵因素。本指南將介紹一系列最佳實(shí)踐,幫助您在處理千萬級數(shù)據(jù)時(shí)提高

    2024年02月03日
    瀏覽(37)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包