欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

網(wǎng)絡(luò)隔離Raft是怎么解決CPU飆高問(wèn)題的呢?

jf_ro2CN3Fa ? 來(lái)源:稀土掘金 ? 2023-02-06 14:05 ? 次閱讀

今天下午突然 出現(xiàn) 測(cè)試環(huán)境 cpu飆高,干到了 60%,其他項(xiàng)目 響應(yīng)時(shí)間明顯變長(zhǎng)。。。有點(diǎn)嚇人,不想背鍋

項(xiàng)目背景

出問(wèn)題的項(xiàng)目是 需要連接各個(gè)不同nacos 和不同的 namespace 進(jìn)行對(duì)應(yīng)操作的 一個(gè)項(xiàng)目,對(duì)nacos的操作都是httpClient 調(diào)用的api接口「httpClient方法 沒(méi)有問(wèn)題,不用質(zhì)疑這個(gè)」

定位問(wèn)題

首先 這 cpu高了,直接top -Hp 看看

定位到 進(jìn)程id,然后 執(zhí)行 jstack 進(jìn)程id -> 1.txt

看到堆棧信息 ,下面提示信息有很多

"com.alibaba.nacos.client.config.security.updater"#2269daemonprio=5os_prio=0tid=0x00007fa3ec401800nid=0x8d85waitingoncondition[0x00007fa314396000]
java.lang.Thread.State:TIMED_WAITING(parking)
atsun.misc.Unsafe.park(NativeMethod)
-parkingtowaitfor<0x00000000f7f3eae0>(ajava.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
atjava.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
atjava.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
atjava.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093)
atjava.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
atjava.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
atjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
atjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
atjava.lang.Thread.run(Thread.java:748)

但是上面這個(gè)提示信息 顯示 是 線程內(nèi)部的,而且是nacos client 內(nèi)部的

你這么搞,讓我很難受啊,我都是http 調(diào)用的,當(dāng)時(shí)就是為了 防止開(kāi)啟無(wú)用的線程,這。。。。。「怎么」

那我去 根據(jù)你的關(guān)鍵字找找 是哪里打印的,「關(guān)鍵字 com.alibaba.nacos.client.config.security.updater」

ServerHttpAgent 類的方法

//initexecutorService
this.executorService=newScheduledThreadPoolExecutor(1,newThreadFactory(){
@Override
publicThreadnewThread(Runnabler){
Threadt=newThread(r);
t.setName("com.alibaba.nacos.client.config.security.updater");
t.setDaemon(true);
returnt;
}
});

這是構(gòu)造方法啊,應(yīng)該只初始化一次的啊,往上debug,我靠,NacosConfigService 類中調(diào)用了,「debug 看什么時(shí)候調(diào)用了 不就行了嘛」

項(xiàng)目初始化的時(shí)候 調(diào)用了一次,業(yè)務(wù)系統(tǒng)依賴nacos嘛,ok 可以理解

再就是漫長(zhǎng)的等待,30s后 發(fā)現(xiàn)又是一次調(diào)用,我去,怎么可能。。。

往回debug,代碼如下

scheduler.schedule("定時(shí)校對(duì)灰度nacos配置",()->loadGrayConfig(grayFileName),
1800,1800,TimeUnit.SECONDS);
/**
*灰度配置更新解決網(wǎng)絡(luò)隔離的問(wèn)題
*
*@paramgrayFileName灰度文件的名稱
*/
privatevoidloadGrayConfig(StringgrayFileName){
synchronized(this){
System.err.println("loadGrayConfigdatetime:"+DateUtils.formatDate(newDate()));
//刷一次緩存重新獲取nacos內(nèi)容賦值
grayConfigManager.loadNoCache(grayFileName);
}
}
74649f22-a3be-11ed-bfe3-dac502259ad0.png

等會(huì),難道 小丑是我。。。。

這當(dāng)時(shí)是為了灰度功能,定時(shí)數(shù)據(jù)校驗(yàn)用的 用了一個(gè)線程池,當(dāng)時(shí)以為用了線程池 妥妥的。。。還特意調(diào)用的 Nocache 方法,讓他創(chuàng)建新的nacos Config對(duì)象,做數(shù)據(jù)校對(duì)

「但是每調(diào)用一次 NacosFactory.createConfigService(properties) ,nacos config 構(gòu)造器就會(huì)開(kāi)一個(gè)線程,就導(dǎo)致了這個(gè)問(wèn)題」

這里可能你要問(wèn)了 你說(shuō) 為了防止網(wǎng)絡(luò)隔離 才加的這個(gè)調(diào)度任務(wù),什么是網(wǎng)絡(luò)隔離啊?

7494062c-a3be-11ed-bfe3-dac502259ad0.jpg

我剛開(kāi)始聽(tīng)說(shuō)這個(gè)概念是 當(dāng)時(shí)學(xué)習(xí) Raft

假設(shè)一個(gè)Raft集群擁有三個(gè)節(jié)點(diǎn),其中節(jié)點(diǎn)3的「網(wǎng)絡(luò)被隔離」 ,那么按照「BasicRaft」 的實(shí)現(xiàn),集群會(huì)有以下動(dòng)作:

節(jié)點(diǎn)3由于網(wǎng)絡(luò)被隔離,收不到來(lái)自Leader的Heartbeat和AppendEntries,所以節(jié)點(diǎn)3會(huì)進(jìn)入選舉過(guò)程,當(dāng)然選舉過(guò)程也是收不到投票的,所以節(jié)點(diǎn)3會(huì)反復(fù)超時(shí)選舉;節(jié)點(diǎn)3的Term就會(huì)一直增大

節(jié)點(diǎn)1與節(jié)點(diǎn)2會(huì)正常工作,并停留在當(dāng)時(shí)的Term

網(wǎng)絡(luò)恢復(fù)之后,Leader給節(jié)點(diǎn)3發(fā)送RPC的時(shí)候,節(jié)點(diǎn)3會(huì)拒絕這些RPC理由是發(fā)送方任期太小。

Leader收到節(jié)點(diǎn)3發(fā)送的拒絕后,會(huì)增大自己的Term,然后變成Follower。

隨后,集群開(kāi)始新的選舉,大概率原本的Leader會(huì)成為新一輪的Leader。

那么網(wǎng)絡(luò)隔離 Raft是怎么解決的呢?

多輪投票的安全問(wèn)題是棘手的,必須避免同一高度不同輪數(shù)分別提交兩個(gè)不同區(qū)塊的情形。在Tendermint中,這個(gè)問(wèn)題可以通過(guò)鎖機(jī)制(locking mechanism)得到解決。

鎖定規(guī)則:「預(yù)投票鎖(Prevote-the-Lock)」

驗(yàn)證者只能「預(yù)投票(pre-vote)」 他們被鎖定的區(qū)塊。這樣就阻止驗(yàn)證者在上一輪中預(yù)提交(pre-commit)一個(gè)區(qū)塊,之后又預(yù)投票了下一輪的另一個(gè)區(qū)塊。

· 波爾卡解鎖(Unlock-on-Polka ):驗(yàn)證者只有在看到更高一輪(相對(duì)于其當(dāng)前被鎖定區(qū)塊的輪數(shù))的波爾卡之后才能釋放該鎖。這樣就允許驗(yàn)證者解鎖,如果他們預(yù)提交了某個(gè)區(qū)塊,但是這個(gè)區(qū)塊網(wǎng)絡(luò)的剩余節(jié)點(diǎn)不想提交,這樣就保護(hù)了整個(gè)網(wǎng)絡(luò)的運(yùn)轉(zhuǎn),并且這樣做并沒(méi)有損害網(wǎng)絡(luò)安全性。

「解決方案是把term替換成(term, nodeid),并且按照字典序比較大小(a > b === a.term > b.term || a.term == b.term && a.nodeid > b. node_id). 這是paxos里的做法, 保證不會(huì)出現(xiàn)raft里的沖突.」

原理是, raft對(duì)voting的階段有2個(gè)值來(lái)描述: term和當(dāng)前投了哪個(gè)node_id, 即[term, nodeid], 由于raft不允許一個(gè)term vote2個(gè)不同的不同的node, 也就是說(shuō), vote_req.term > local.term && vote_req.nodeid == local.nodeid 才會(huì)grant這個(gè)vote請(qǐng)求.

把term替換成(term,nodeid)后, vote階段的大小比較變成了: vote_req.term > local.term || vote_req.term == local.term && vote_req.nodeid >= local.nodeid, 條件邊寬松了. 同一個(gè)term內(nèi), 較大nodeid的可以搶走較小nodeid 已經(jīng)建立的leader.

而日志中原本記錄的term也需要將其替換成(term, node_id), 因?yàn)檫@兩項(xiàng)加起來(lái)才能唯一確定一個(gè)leader. 之前raft里只需一個(gè)term就可以唯一確定一個(gè)leader.

vote中比較最大log id相應(yīng)的,從比較tuple (term, index) 改成比較tuple (term, node_id, index).

就這么點(diǎn)修改.

「總結(jié)下來(lái)就是 按照字典排序 和 預(yù)投票鎖 保證 當(dāng)多個(gè) term 相同的 candidate 相遇后,肯定會(huì)有一個(gè) 獲得多數(shù)派投票」

想法

我們?nèi)绻霈F(xiàn) 異常的網(wǎng)絡(luò)隔離情況再回來(lái),可能導(dǎo)致 數(shù)據(jù)的不一致,但是上面的 解決辦法 因?yàn)?比較重,不適合我們,我們就單純 引入 「定時(shí)校對(duì)的調(diào)度任務(wù) 進(jìn)行比較(和 對(duì)賬一樣)」

修復(fù)

我對(duì)nacos config 連接進(jìn)行 遍歷查找 是否存活,不存活 我就shutdown,然后生成一個(gè)新的,而不是這種全部生成一邊,畢竟人家 構(gòu)造器開(kāi)了線程。。。。

說(shuō)回來(lái)還是因?yàn)?我當(dāng)時(shí)自信了,沒(méi)往這個(gè)調(diào)用下面看,在子類中 寫(xiě)的開(kāi)線程 哈哈,行吧,改改 ,跑到測(cè)試環(huán)境 看看效果(CPU)

74a4b346-a3be-11ed-bfe3-dac502259ad0.png





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10918

    瀏覽量

    213164
  • RPC
    RPC
    +關(guān)注

    關(guān)注

    0

    文章

    111

    瀏覽量

    11585
  • cache技術(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    41

    瀏覽量

    1097

原文標(biāo)題:記一次 Nacos 導(dǎo)致的 CPU 飆高問(wèn)題 !

文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何實(shí)現(xiàn)網(wǎng)絡(luò)隔離

    如何實(shí)現(xiàn)網(wǎng)絡(luò)隔離
    發(fā)表于 10-31 08:10

    什么是網(wǎng)絡(luò)隔離技術(shù)

    什么是網(wǎng)絡(luò)隔離技術(shù)網(wǎng)絡(luò)隔離,是指兩個(gè)或兩個(gè)以上的計(jì)算機(jī)或網(wǎng)絡(luò),不相連、不相通、相互斷開(kāi)。不需要信息交換同的
    發(fā)表于 08-19 09:11 ?5878次閱讀

    高性能CPU時(shí)鐘網(wǎng)絡(luò)設(shè)計(jì)

    討論了物理設(shè)計(jì)中時(shí)鐘網(wǎng)絡(luò)的設(shè)計(jì)技術(shù),并以現(xiàn)有的CPU時(shí)鐘網(wǎng)絡(luò)的為例,介紹了高性能CPU的時(shí)鐘網(wǎng)絡(luò)設(shè)計(jì)技術(shù)。
    發(fā)表于 12-27 15:28 ?46次下載
    高性能<b class='flag-5'>CPU</b>時(shí)鐘<b class='flag-5'>網(wǎng)絡(luò)</b>設(shè)計(jì)

    高性能CPU的時(shí)鐘網(wǎng)絡(luò)設(shè)計(jì)

    高性能CPU的時(shí)鐘網(wǎng)絡(luò)設(shè)計(jì)
    發(fā)表于 10-30 15:28 ?23次下載
    高性能<b class='flag-5'>CPU</b>的時(shí)鐘<b class='flag-5'>網(wǎng)絡(luò)</b>設(shè)計(jì)

    物理隔離與邏輯隔離網(wǎng)絡(luò)光端機(jī)和光纖收發(fā)器到底有什么區(qū)別

    物理隔離網(wǎng)絡(luò)的需求近期,電力、銀行、公安、部隊(duì)、鐵路、大型企事業(yè)單位專網(wǎng)有廣泛物理隔離的以太網(wǎng)接入需求,但究竟什么是物理隔離以太網(wǎng)?很多廠
    發(fā)表于 04-02 08:00 ?0次下載
    物理<b class='flag-5'>隔離</b>與邏輯<b class='flag-5'>隔離</b><b class='flag-5'>網(wǎng)絡(luò)</b>光端機(jī)和光纖收發(fā)器到底有什么區(qū)別

    CPU為什么不做成圓形?

    當(dāng)然也有長(zhǎng)方形的版本。上表面平整光滑,下表面則有著金屬觸點(diǎn)或針腳。雖然我們默認(rèn)CPU的形狀為矩形,但是不知道有沒(méi)有小伙伴想過(guò)CPU為什么不做成圓形
    的頭像 發(fā)表于 11-10 17:30 ?1972次閱讀

    JVM CPU使用率問(wèn)題的排查分析過(guò)程

    問(wèn)題現(xiàn)象 排查過(guò)程 問(wèn)題現(xiàn)象 首先,我們一起看看通過(guò) VisualVM 監(jiān)控到的機(jī)器 CPU 使用率圖: 如上圖所示,在 下午3:45 分之前,CPU 的使用率明顯,最高
    的頭像 發(fā)表于 10-10 16:31 ?2417次閱讀

    網(wǎng)絡(luò)隔離變壓器的選型

    Hqst華強(qiáng)盛導(dǎo)讀:網(wǎng)絡(luò)隔離變壓器的選型需要考慮以下幾個(gè)因素: 輸入和輸出電壓:網(wǎng)絡(luò)隔離變壓器的輸入和輸出電壓應(yīng)與應(yīng)用場(chǎng)景的要求相匹配。 額定電流:
    發(fā)表于 05-04 08:41 ?1348次閱讀

    持續(xù)在榜的RAFT-Stereo,你確定不來(lái)了解嗎?

    給定一對(duì)矯正后的圖像(IL, IR),目標(biāo)是估計(jì)一個(gè)視差場(chǎng)d,使每個(gè)IL中的像素都有水平的位移。與RAFT類似,RAFT-Stereo的方法由三個(gè)主要組件組成:特征提取器、相關(guān)金字塔和基于GRU的更新運(yùn)算符,如圖1所示。更新運(yùn)算符迭代地從相關(guān)金字塔中檢索特征并對(duì)視差場(chǎng)進(jìn)行
    的頭像 發(fā)表于 05-19 09:24 ?915次閱讀
    持續(xù)在榜的<b class='flag-5'>RAFT</b>-Stereo,你確定不來(lái)了解嗎?

    將Paxos和Raft統(tǒng)一為一個(gè)協(xié)議:Abstract-paxos

    之前寫(xiě)了一篇 Paxos 的直觀解釋,用簡(jiǎn)單的語(yǔ)言描述了 paxos 的工作原理,看過(guò)的朋友說(shuō)是看過(guò)的最易懂的 paxos 介紹,同時(shí)也問(wèn)我是否也寫(xiě)一篇 raft 的。但 raft 介紹文章已經(jīng)很多很優(yōu)質(zhì)了,感覺(jué)沒(méi)什么可寫(xiě)的,就一直拖著。
    的頭像 發(fā)表于 06-08 14:36 ?513次閱讀
    將Paxos和<b class='flag-5'>Raft</b>統(tǒng)一為一個(gè)協(xié)議:Abstract-paxos

    使用 RAPIDS RAFT 進(jìn)行機(jī)器學(xué)習(xí)和數(shù)據(jù)分析的可重用計(jì)算模式

    使用 RAPIDS RAFT 進(jìn)行機(jī)器學(xué)習(xí)和數(shù)據(jù)分析的可重用計(jì)算模式
    的頭像 發(fā)表于 07-05 16:30 ?634次閱讀
    使用 RAPIDS <b class='flag-5'>RAFT</b> 進(jìn)行機(jī)器學(xué)習(xí)和數(shù)據(jù)分析的可重用計(jì)算模式

    功率電源應(yīng)用中需要怎樣的隔離驅(qū)動(dòng)?為什么需要隔離驅(qū)動(dòng)?

    功率電源應(yīng)用中需要怎樣的隔離驅(qū)動(dòng)?為什么需要隔離驅(qū)動(dòng)?為什么有的電機(jī)不需要隔離驅(qū)動(dòng)? 在功率電源應(yīng)用中,
    的頭像 發(fā)表于 10-23 09:30 ?1204次閱讀

    cpu溫度太高怎么解決?cpu溫度的原因?

    cpu溫度太高怎么解決?cpu溫度的原因? CPU (中央處理器) 溫度過(guò)高可能會(huì)導(dǎo)致系統(tǒng)崩潰、性能下降甚至損壞硬件,因此是一個(gè)需要嚴(yán)肅對(duì)待的問(wèn)題。在本文中,我們將探討
    的頭像 發(fā)表于 12-09 16:15 ?4475次閱讀

    請(qǐng)問(wèn)一下docker是怎么實(shí)現(xiàn)cpu隔離的?

    Docker 使用 cgroups(控制組)來(lái)實(shí)現(xiàn) CPU 隔離。
    的頭像 發(fā)表于 01-15 10:06 ?581次閱讀