最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

線程池調(diào)用kafka發(fā)送消息產(chǎn)生的內(nèi)存泄漏問題排查解決

 更新時間:2023年08月31日 10:45:26   作者:我不是碼農(nóng)  
這篇文章主要為大家介紹了線程池調(diào)用kafka發(fā)送消息產(chǎn)生的內(nèi)存泄漏問題排查解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

布控預(yù)警的需求

在布控預(yù)警的需求實現(xiàn)里,我需要把持久化在數(shù)據(jù)庫中的布控對象(身份證、姓名、手機(jī)號、imsi、faceId等等都可分別作為布控對象)一直往kafka里發(fā)送,然后由flink進(jìn)行消費,把當(dāng)前的布控對象和存儲的用戶軌跡記錄(有旅客、航班、車輛卡口、人臉等等數(shù)據(jù))同時包含身份證、姓名等等信息進(jìn)行比對,如果比對成功則觸發(fā)布控預(yù)警
最開始我是通過單線程發(fā)送,發(fā)現(xiàn)發(fā)送速度有點慢,這里面我需要把布控對象做一些處理(比如split,flat,fitler)后才發(fā)送到kafka,大概30w+的布控對象需要十多分鐘那邊才能預(yù)警到,于是開始進(jìn)行性能優(yōu)化,使用并行流進(jìn)行處理,改變之后同樣30w的數(shù)據(jù)這次只需要8秒左右就能發(fā)送完成,然而跑了一陣之后程序開始出現(xiàn)報錯

Received invalid metadata error in produce request on partition xxxTopic due to org.apache.kafka.common.errors.

NetworkException: The server disconnected before a response was received.. Going to request metadata update now

報錯分析

第一眼看到這個錯,我以為是kafka或者網(wǎng)絡(luò)出問題了,也去看了broker的日志,發(fā)現(xiàn)是有一些關(guān)于當(dāng)前topic被刪除的錯誤,但是日志級別只是一個info,我以為是topic出現(xiàn)錯誤,又嘗試了使用kakfa的消費命令,發(fā)現(xiàn)是能夠正常消費的,說明這個topic和metadata應(yīng)該是沒有問題的。

我也在網(wǎng)上搜索著,發(fā)現(xiàn)很少有這個問題的說明,但是我發(fā)現(xiàn)了一些特征,經(jīng)過我重啟后程序又是可以繼續(xù)發(fā)送的,而且速度還是很快,但是跑了一會兒,開始又有這個報錯了,開始是一個報錯,其他的都成功,后來是慢慢的,報錯越來越多,成功的越來越少。接著過了很久竟然還發(fā)生了nacos的心跳超時導(dǎo)致服務(wù)不可用的情況。

我這時想到了之前看過的一些文章,說頻繁fullgc可能會導(dǎo)致心跳請求失敗的問題,最開始的時候看了cpu使用率,發(fā)現(xiàn)非常高,600%左右,我以為是因為我的程序里面因為是有定時任務(wù)去循環(huán)發(fā)送消息所有有點占用是正常的,沒有當(dāng)回事,后來我用起了arthas和gc命令,先使用dashboard,看了下cpu線程,發(fā)現(xiàn)gc線程占用以及那個并行流forkjoinpool的線程占用非常大的cpu利用率,然后full gc次數(shù)非常多,又使用

jstat -gcutil $pid 1000

命令進(jìn)行確認(rèn),開始我就發(fā)現(xiàn)了old區(qū)的占用比非常高,且fullgc的頻率非常高,幾乎是幾秒鐘就有一次,最重要的是,最開始是能回收一些內(nèi)存,隨著時間的推移,old區(qū)占用比基線一直在增長,最后到了100,在這個過程中我也發(fā)現(xiàn)了,出現(xiàn)報錯的頻率和old區(qū)占用比之間是存在關(guān)系的,報錯越來越多的時候,old區(qū)被占用的越多,fullgc越頻繁。

內(nèi)存泄漏

這里我才意識到這是出現(xiàn)內(nèi)存泄漏的問題了吧,可能是我寫的代碼有點問題,于是我繼續(xù)開始排查,通過

jmap dump:format=b,file=xx.hprof $pid

然后導(dǎo)出文件到本地,用java visualvm打開(也可以用mat或者idea的profiler進(jìn)行解析,我這里用visualvm解析類實例的還報了堆內(nèi)存不足,要改一下/lib/visualvm/etc/visualvm.conf,把-xms改大點)

查看了一下占用最大的幾個對象ObjectiveVO(這個是我推送到kafka的封裝對象)、LogUtil.$$(這個是我發(fā)送消息的工具類)、java.util.concurrent.LinkedBlockingDeque$NODE,還有char[]、String這幾個占用是比較大的,看到這里我逐漸清晰了,在logUtil里面的代碼我是從其他需要發(fā)送日志的地方拷過來的,在這里我加了一個異步executor的操作,主要就是為了隔離業(yè)務(wù)和日志的發(fā)送或者發(fā)生異常的情況,然而,我把這個executor的線程池隊列設(shè)置為了new LinkedBlockingDeque<>(),這個的隊列的默認(rèn)長度值為Integer.MAX,因為我們的系統(tǒng)屬于to G系統(tǒng),所以操作日志是比較少的,一直沒有發(fā)現(xiàn)這個問題,而在這個布控發(fā)送Kafka的場景中,數(shù)據(jù)量非常大,8秒鐘左右差不多就是30w的數(shù)據(jù),為了快速實現(xiàn)布控我甚至在外層又加了一個并行流,然后這里logUtil里面又有一個異步把ObjectiveVO加入到隊列,所以才導(dǎo)致的內(nèi)存溢出了....

后面我把這個異步executor去掉了,就沒有發(fā)生內(nèi)存溢出的問題,也就沒有發(fā)生上面報的NetworkException,或者如果要使用線程池異步的話,一定要設(shè)計一下隊列的長度,以及拒絕策略?。。?/p>

以上就是線程池調(diào)用kafka發(fā)送消息產(chǎn)生的內(nèi)存泄漏問題的詳細(xì)內(nèi)容,更多關(guān)于kafka發(fā)送消息內(nèi)存泄漏的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java轉(zhuǎn)換解析中間帶有 “T“和“Z“ 的時間格式

    Java轉(zhuǎn)換解析中間帶有 “T“和“Z“ 的時間格式

    這篇文章主要給大家介紹了關(guān)于Java轉(zhuǎn)換解析中間帶有 “T“和“Z“ 的時間格式,相信很多小伙伴在時間格式轉(zhuǎn)換的時候非常頭疼,文中通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • 在Java中實現(xiàn)支持隨機(jī)訪問的固定窗口隊列的代碼示例

    在Java中實現(xiàn)支持隨機(jī)訪問的固定窗口隊列的代碼示例

    本文介紹了一種在Java中實現(xiàn)的自定義滑動隊列,利用了Google Guava庫中的EvictingQueue,這種滑動隊列允許以固定大小管理隊列,并能夠隨機(jī)訪問元素,我們將探討這種數(shù)據(jù)結(jié)構(gòu)的設(shè)計、實現(xiàn)和使用,需要的朋友可以參考下
    2025-10-10
  • Java經(jīng)典面試題匯總:JVM

    Java經(jīng)典面試題匯總:JVM

    本篇總結(jié)的是JVM相關(guān)的面試題,后續(xù)會持續(xù)更新,希望我的分享可以幫助到正在備戰(zhàn)面試的實習(xí)生或者已經(jīng)工作的同行,如果發(fā)現(xiàn)錯誤還望大家多多包涵,不吝賜教,謝謝
    2021-07-07
  • SpringBoot整合OpenFeign的完整指南

    SpringBoot整合OpenFeign的完整指南

    OpenFeign 是由 Netflix 開發(fā)的一個聲明式 Web 服務(wù)客戶端,它使得編寫 HTTP 客戶端變得更加簡單,本文為大家介紹了SpringBoot整合OpenFeign的詳細(xì)步驟,需要的小伙伴可以參考下
    2025-04-04
  • Java實現(xiàn)二分搜索樹的示例代碼

    Java實現(xiàn)二分搜索樹的示例代碼

    二分搜索樹是一顆二叉樹,二分搜索樹每個節(jié)點的左子樹的值都小于該節(jié)點的值,每個節(jié)點右子樹的值都大于該節(jié)點的值。本文將利用Java實現(xiàn)二分搜索樹,需要的可以參考一下
    2022-03-03
  • Java中的隨機(jī)數(shù)Random

    Java中的隨機(jī)數(shù)Random

    這篇文章主要介紹了Java中的隨機(jī)數(shù)Random,關(guān)于隨機(jī)數(shù)的介紹不設(shè)置隨機(jī)數(shù)種子,你每次隨機(jī)抽樣得到的數(shù)據(jù)都是不一樣的。設(shè)置了隨機(jī)數(shù)種子,能夠確保每次抽樣的結(jié)果一樣,下面來了解具體的詳細(xì)內(nèi)容介紹吧
    2022-03-03
  • 簡單的java圖片處理類(圖片水印 圖片縮放)

    簡單的java圖片處理類(圖片水印 圖片縮放)

    本圖片處理類功能非常之強(qiáng)大可以實現(xiàn)幾乎所有WEB開發(fā)中對圖像的處理功能都集成了,包括有縮放圖像、切割圖像、圖像類型轉(zhuǎn)換、彩色轉(zhuǎn)黑白、文字水印、圖片水印等功能
    2013-11-11
  • 使用IDEA創(chuàng)建Java Web項目并部署訪問的圖文教程

    使用IDEA創(chuàng)建Java Web項目并部署訪問的圖文教程

    本文通過圖文并茂的形式給大家介紹了使用IDEA創(chuàng)建Java Web項目并部署訪問的教程,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-08-08
  • SpringBoot中使用Ehcache的詳細(xì)教程

    SpringBoot中使用Ehcache的詳細(xì)教程

    EhCache 是一個純 Java 的進(jìn)程內(nèi)緩存框架,具有快速、精干等特點,是 Hibernate 中默認(rèn)的 CacheProvider。這篇文章主要介紹了SpringBoot中使用Ehcache的相關(guān)知識,需要的朋友可以參考下
    2020-08-08
  • 在SpringBoot中更改默認(rèn)端口的方法總結(jié)

    在SpringBoot中更改默認(rèn)端口的方法總結(jié)

    在本文中,小編將帶大家學(xué)習(xí)如何在 Spring Boot 中更改默認(rèn)端口,默認(rèn)情況下,嵌入式 Web 服務(wù)器使用 8080端口來啟動 Spring 引導(dǎo)應(yīng)用程序,有幾種方法可以更改該端口,文中介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07

最新評論

普格县| 合肥市| 铁力市| 云安县| 白河县| 北安市| 张北县| 枣庄市| 方城县| 阳朔县| 泗洪县| 东光县| 方山县| 张掖市| 株洲市| 灯塔市| 元朗区| 光山县| 长乐市| 辛集市| 平遥县| 祥云县| 双鸭山市| 涪陵区| 濉溪县| 金秀| 贵州省| 龙游县| 崇阳县| 通海县| 石家庄市| 德安县| 云阳县| 博野县| 陆川县| 高雄县| 平顺县| 建阳市| 郓城县| 横山县| 壶关县|