總在不輕易間就留了個(gè)頻繁GC的坑

最近有寫一些關(guān)于prometheus監(jiān)控的文章,也是在實(shí)踐這塊的內(nèi)容。

今天分享一個(gè)在實(shí)踐過程中遇到的問題,也許你也遇到過。

針對(duì)RPC服務(wù)做埋點(diǎn)的時(shí)候,想知道下面這些指標(biāo):

  • QPS
  • 響應(yīng)時(shí)間
  • 被哪個(gè)服務(wù)調(diào)用了
  • 被哪個(gè)接口調(diào)用了

會(huì)有下面的代碼進(jìn)行指標(biāo)的暴露:

Counter.builder("dubbo.request.total").description("請(qǐng)求數(shù)量")
        .tags(Tags.of(apiTag, typeTag, originApplicationTag, originApiTag))
        .register(meterRegistry).increment();

apiTag:比說OrderService.createOrder

typeTag:success, error, timeout等

originApplicationTag: 來源的服務(wù)名稱,比如goods-service

originApiTag:來源的API信息,比如GET:goods/1001

在程序中會(huì)通過/actuator/prometheus進(jìn)行數(shù)據(jù)的暴露,格式如下:

dubbo_request_total{api="GoodsRemoteService.get(int)",originApplication="order-service",originApi="order/1001",type="success",} 59.0

dubbo_request_total這個(gè)指標(biāo)會(huì)產(chǎn)生N條,N的決定因素就是dubbo_request_total中這些tag值的重復(fù)度,也就是完全一樣的數(shù)據(jù)只有一條,如果有一個(gè)tag不一樣,就會(huì)新產(chǎn)生一條數(shù)據(jù)。

上線后沒多久,就收到了頻繁GC的告警。然后排查下來發(fā)現(xiàn)指標(biāo)數(shù)據(jù)已經(jīng)堆積了很多。根本原因在originApi,因?yàn)榻涌谑荝estful風(fēng)格的資源形式,所以一個(gè)接口會(huì)產(chǎn)生N條數(shù)據(jù),比如order/1001, order/1002 等。

時(shí)間越來越長(zhǎng),被訪問的數(shù)據(jù)范圍也就越大,內(nèi)存中堆積的數(shù)據(jù)也就越多,然后就出問題了。

Restful風(fēng)格的資源形式在其他的場(chǎng)景中也經(jīng)常會(huì)遇到,比如用Sentinel限流的時(shí)候也是一樣,在后臺(tái)也是會(huì)顯示很多資源,也得做格式化才行。

關(guān)于作者:尹吉?dú)g,簡(jiǎn)單的技術(shù)愛好者,《Spring Cloud微服務(wù)-全棧技術(shù)與案例解析》, 《Spring Cloud微服務(wù) 入門 實(shí)戰(zhàn)與進(jìn)階》作者, 公眾號(hào)猿天地發(fā)起人。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容