日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

記一次 .NET某網(wǎng)絡(luò)邊緣計(jì)算系統(tǒng) 卡死分析

來源: 責(zé)編: 時(shí)間:2024-07-01 17:13:43 125觀看
導(dǎo)讀一、背景1. 講故事早就聽說過有什么 網(wǎng)絡(luò)邊緣計(jì)算,這次還真給遇到了,有點(diǎn)意思,問了下 chatgpt 這是干嘛的 ?網(wǎng)絡(luò)邊緣計(jì)算是一種計(jì)算模型,它將計(jì)算能力和數(shù)據(jù)存儲(chǔ)位置從傳統(tǒng)的集中式數(shù)據(jù)中心向網(wǎng)絡(luò)邊緣的用戶設(shè)備、傳感器

一、背景

1. 講故事

早就聽說過有什么 網(wǎng)絡(luò)邊緣計(jì)算,這次還真給遇到了,有點(diǎn)意思,問了下 chatgpt 這是干嘛的 ?2f728資訊網(wǎng)——每日最新資訊28at.com

網(wǎng)絡(luò)邊緣計(jì)算是一種計(jì)算模型,它將計(jì)算能力和數(shù)據(jù)存儲(chǔ)位置從傳統(tǒng)的集中式數(shù)據(jù)中心向網(wǎng)絡(luò)邊緣的用戶設(shè)備、傳感器和其他物聯(lián)網(wǎng)設(shè)備移動(dòng)。這種模型的目的是在接近數(shù)據(jù)生成源頭的地方提供更快速的計(jì)算和數(shù)據(jù)處理能力,從而減少數(shù)據(jù)傳輸延遲并提高服務(wù)質(zhì)量。網(wǎng)絡(luò)邊緣計(jì)算使得在設(shè)備本地進(jìn)行數(shù)據(jù)處理和決策成為可能,同時(shí)也有助于減輕對中心數(shù)據(jù)中心的網(wǎng)絡(luò)流量和負(fù)載。2f728資訊網(wǎng)——每日最新資訊28at.com

看到.NET還有這樣的應(yīng)用場景還是挺欣慰的,接下來就來分析下這個(gè)dump到底是怎么回事?2f728資訊網(wǎng)——每日最新資訊28at.com

二、WinDbg 分析

1. 為什么會(huì)卡死

不同程序的卡死有不同的分析方式,所以要先鑒別下程序的類型以及主線程的調(diào)用棧即可,參考如下:2f728資訊網(wǎng)——每日最新資訊28at.com

0:000> !eeversion5.0.721.255085.0.721.25508 @Commit: 556582d964cc21b82a88d7154e915076f6f9008eServer mode with 64 gc heapsSOS Version: 8.0.10.10501 retail build0:000> k # Child-SP          RetAddr               Call Site00 0000ffff`e0dddac0 0000fffd`c194c30c     libpthread_2_28!pthread_cond_wait+0x238...18 (Inline Function) --------`--------     libcoreclr!RunMain::$_0::operator()::{lambda(Param *)#1}::operator()+0x14c [/__w/1/s/src/coreclr/src/vm/assembly.cpp @ 1536] 19 (Inline Function) --------`--------     libcoreclr!RunMain::$_0::operator()+0x188 [/__w/1/s/src/coreclr/src/vm/assembly.cpp @ 1538] 1a 0000ffff`e0dde600 0000fffd`c153e860     libcoreclr!RunMain+0x298 [/__w/1/s/src/coreclr/src/vm/assembly.cpp @ 1538] ...20 0000ffff`e0dded10 0000fffd`c1bf7800     libhostpolicy!corehost_main+0xc0 [/root/runtime/src/installer/corehost/cli/hostpolicy/hostpolicy.cpp @ 409] 21 (Inline Function) --------`--------     libhostfxr!execute_app+0x2c0 [/root/runtime/src/installer/corehost/cli/fxr/fx_muxer.cpp @ 146] 22 (Inline Function) --------`--------     libhostfxr!<unnamed-namespace>::read_config_and_execute+0x3b4 [/root/runtime/src/installer/corehost/cli/fxr/fx_muxer.cpp @ 520] 23 0000ffff`e0ddeeb0 0000fffd`c1bf6840     libhostfxr!fx_muxer_t::handle_exec_host_command+0x57c [/root/runtime/src/installer/corehost/cli/fxr/fx_muxer.cpp @ 1001] 24 0000ffff`e0ddf000 0000fffd`c1bf4090     libhostfxr!fx_muxer_t::execute+0x2ec25 0000ffff`e0ddf130 0000aaad`c9e1d22c     libhostfxr!hostfxr_main_startupinfo+0xa0 [/root/runtime/src/installer/corehost/cli/fxr/hostfxr.cpp @ 50] 26 0000ffff`e0ddf200 0000aaad`c9e1d468     dotnet!exe_start+0x36c [/root/runtime/src/installer/corehost/corehost.cpp @ 239] 27 0000ffff`e0ddf370 0000fffd`c1c63fe0     dotnet!main+0x90 [/root/runtime/src/installer/corehost/corehost.cpp @ 302] 28 0000ffff`e0ddf3b0 0000aaad`c9e13adc     libc_2_28!_libc_start_main+0xe029 0000ffff`e0ddf4e0 00000000`00000000     dotnet!start+0x34

從卦中的指標(biāo)來看,這是一個(gè) Linux 上部署的 Web網(wǎng)站,既然是網(wǎng)站的卡死,那就要關(guān)注各個(gè)線程都在做什么。2f728資訊網(wǎng)——每日最新資訊28at.com

2. 線程都在干嘛

以我多年的分析經(jīng)驗(yàn),絕大多數(shù)都是由于 線程饑餓 或者說 線程池耗盡 導(dǎo)致的,首先我們看下線程池的情況。2f728資訊網(wǎng)——每日最新資訊28at.com

0:000> !tThreadCount:      365UnstartedThread:  0BackgroundThread: 354PendingThread:    0DeadThread:       10Hosted Runtime:   no                                                                                                            Lock   DBG   ID     OSID ThreadOBJ           State GC Mode     GC Alloc Context                  Domain           Count Apt Exception   0    1    31eaf 0000AAADF267C600  2020020 Preemptive  0000000000000000:0000000000000000 0000aaadf26634b0 -00001 Ukn ... 423  363    36d30 0000FFDDB4000B20  1020220 Preemptive  0000000000000000:0000000000000000 0000aaadf26634b0 -00001 Ukn (Threadpool Worker)  424  364    36d31 0000FFDDA8000B20  1020220 Preemptive  0000000000000000:0000000000000000 0000aaadf26634b0 -00001 Ukn (Threadpool Worker)  425  365    36d32 0000FFDDAC000B20  1020220 Preemptive  0000000000000000:0000000000000000 0000aaadf26634b0 -00001 Ukn (Threadpool Worker) 0:000> !tpUsing the Portable thread pool.CPU utilization:  9%Workers Total:    252Workers Running:  236Workers Idle:     13Worker Min Limit: 64Worker Max Limit: 32767Completion Total:   0Completion Free:    0Completion MaxFree: 128Completion Current Limit: 0Completion Min Limit:     64Completion Max Limit:     1000

從卦中看當(dāng)前有 365 個(gè)托管線程,這個(gè)算多嗎?對于64core 來說,這個(gè)線程其實(shí)算是正常,訓(xùn)練營里的朋友都知道,server版的gc僅gc線程就有 64*2=128 個(gè),接下來再看一個(gè)指標(biāo)就是當(dāng)前是否存在任務(wù)積壓?可以使用 !ext tpq 命令,參考輸出如下:2f728資訊網(wǎng)——每日最新資訊28at.com

0:000> !ext tpqglobal work item queue________________________________local per thread work items_____________________________________

從卦中看當(dāng)前沒有任務(wù)積壓,這就有點(diǎn)反經(jīng)驗(yàn)了。2f728資訊網(wǎng)——每日最新資訊28at.com

3. 真的不是線程饑餓嗎

最后一招比較徹底,就是看各個(gè)線程棧都在做什么,可以使用 ~*e !clrstack 命令。2f728資訊網(wǎng)——每日最新資訊28at.com

這不看不知道,一看嚇一跳,有 193 個(gè)線程在 Task.Result 上等待,這玩意太經(jīng)典了,然后從上面的調(diào)用棧 UIUpdateTimer_Elapsed 來看,貌似是一個(gè)定時(shí)器導(dǎo)致的,接下來我就好奇這代碼是怎么寫的?2f728資訊網(wǎng)——每日最新資訊28at.com

分析上面的代碼之后,我發(fā)現(xiàn)它是和 Linux Shell 窗口進(jìn)行命令交互,不知道為何 Shell 沒有響應(yīng)導(dǎo)致代碼在這里卡死。2f728資訊網(wǎng)——每日最新資訊28at.com

4. 為什么線程池沒有積壓

相信有很多朋友對這個(gè)反經(jīng)驗(yàn)的東西很好奇為什么請求沒有積壓在線程池,其實(shí)這個(gè)考驗(yàn)的是你對 PortableThreadPool 的底層了解,這里我就簡單說一下吧。2f728資訊網(wǎng)——每日最新資訊28at.com

  • 在 ThreadPool 中有一個(gè) GateThread 線程是專門給線程池動(dòng)態(tài)注入線程的,參考代碼如下:
private static class GateThread{    private static void GateThreadStart()    {        while (true)        {            bool wasSignaledToWake = DelayEvent.WaitOne((int)delayHelper.GetNextDelay(tickCount));            WorkerThread.MaybeAddWorkingWorker(threadPoolInstance);        }    }}
  • 一旦有人調(diào)用了 Task.Result 代碼,內(nèi)部會(huì)主動(dòng)喚醒 DelayEvent 事件,告訴 GateThread 趕緊通過 MaybeAddWorkingWorker 方法給我注入新的線程,參考代碼如下:
private bool SpinThenBlockingWait(int millisecondsTimeout, CancellationToken cancellationToken){    bool flag3 = ThreadPool.NotifyThreadBlocked();}internal static bool NotifyThreadBlocked(){    if (UsePortableThreadPool)    {        return PortableThreadPool.ThreadPoolInstance.NotifyThreadBlocked();    }    return false;}public bool NotifyThreadBlocked(){    GateThread.Wake(this);}

上面這種主動(dòng)喚醒的機(jī)制是 C# 版 PortableThreadPool 做的優(yōu)化來緩解線程饑餓的,這里有一個(gè)重點(diǎn)就是它只能緩解,換句話說如果上游太猛了還是會(huì)有請求積壓的,但為什么這里沒有積壓呢?很顯然上游不猛唄,那如何眼見為實(shí)呢?這就需要看 timer 的周期數(shù)即可,到當(dāng)前的線程棧上給扒出來。2f728資訊網(wǎng)——每日最新資訊28at.com

0:417> !DumpObj /d 0000ffee380757f8Name:        System.Timers.TimerMethodTable: 0000fffd4ab24030EEClass:     0000fffd4ad6e140Size:        88(0x58) bytesFile:        /home/user/env/dotnet/shared/Microsoft.NETCore.App/5.0.7/System.ComponentModel.TypeConverter.dllFields:              MT    Field   Offset                 Type VT     Attr            Value Name0000fffd4c947498  400001c        8 ...ponentModel.ISite  0 instance 0000000000000000 _site0000000000000000  400001d       10 ....EventHandlerList  0 instance 0000000000000000 _events0000fffd479195d8  400001b       98        System.Object  0   static 0000000000000000 s_eventDisposed0000fffd47926f60  400000e       40        System.Double  1 instance 3000.000000 _interval0000fffd4791fb10  400000f       48       System.Boolean  1 instance                1 _enabled0000fffd4791fb10  4000010       49       System.Boolean  1 instance                0 _initializing0000fffd4791fb10  4000011       4a       System.Boolean  1 instance                0 _delayedEnable0000fffd4ab241d8  4000012       18 ...apsedEventHandler  0 instance 0000ffee3807aae8 _onIntervalElapsed0000fffd4791fb10  4000013       4b       System.Boolean  1 instance                1 _autoReset0000fffd4c944ea0  4000014       20 ...SynchronizeInvoke  0 instance 0000000000000000 _synchronizingObject0000fffd4791fb10  4000015       4c       System.Boolean  1 instance                0 _disposed0000fffd49963e28  4000016       28 ...m.Threading.Timer  0 instance 0000ffee38098dc8 _timer0000fffd48b90a30  4000017       30 ...ing.TimerCallback  0 instance 0000ffee3807aaa8 _callback0000fffd479195d8  4000018       38        System.Object  0 instance 0000ffee38098db0 _cookie

從卦中看當(dāng)前是 3s 為一個(gè)周期,這就能解釋為什么線程池沒有積壓的底層原因了。2f728資訊網(wǎng)——每日最新資訊28at.com

三、總結(jié)

這個(gè)卡死事故還是蠻好解決的,如果有一些經(jīng)驗(yàn)直接用dotnet-counter也是能搞定的,重點(diǎn)在于這是一個(gè) Linux的dump,同時(shí)又是 .NET上的一個(gè)很好玩的場景,故此分享出來。2f728資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-97895-0.html記一次 .NET某網(wǎng)絡(luò)邊緣計(jì)算系統(tǒng) 卡死分析

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 都用10年了,gRPC有什么不好的?

下一篇: 深入探討 C++ 中的內(nèi)部類:封裝與模塊化的利器

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 8月總票房已突破10億!《封神》第一:口碑已經(jīng)成了

    8月5日消息,據(jù)燈塔專業(yè)版數(shù)據(jù),截至8月5日9時(shí)35分,8月總票房(含預(yù)售)已突破10億。其中,《封神》以大比分的優(yōu)勢領(lǐng)先。根據(jù)官方消息,目前該片總票房已經(jīng)超過14.
  • 三分鐘白話RocketMQ系列—— 如何發(fā)送消息

    我們知道RocketMQ主要分為消息 生產(chǎn)、存儲(chǔ)(消息堆積)、消費(fèi) 三大塊領(lǐng)域。那接下來,我們白話一下,RocketMQ是如何發(fā)送消息的,揭秘消息生產(chǎn)全過程。注意,如果白話中不小心提到相關(guān)代
  • 從零到英雄:高并發(fā)與性能優(yōu)化的神奇之旅

    作者 | 波哥審校 | 重樓作為公司的架構(gòu)師或者程序員,你是否曾經(jīng)為公司的系統(tǒng)在面對高并發(fā)和性能瓶頸時(shí)感到手足無措或者焦頭爛額呢?筆者在出道那會(huì)為此是吃盡了苦頭的,不過也得
  • 共享單車的故事講到哪了?

    來源丨海克財(cái)經(jīng)與共享充電寶相差不多,共享單車已很久沒有被國內(nèi)熱點(diǎn)新聞關(guān)照到了。除了一再漲價(jià)和用戶直呼用不起了。近日多家媒體再發(fā)報(bào)道稱,成都、天津、鄭州等地多個(gè)共享單
  • 騰訊VS網(wǎng)易,最卷游戲暑期檔,誰能笑到最后?

    作者:無銹缽來源:財(cái)經(jīng)無忌7月16日晚,上海1862時(shí)尚藝術(shù)中心。伴隨著幻象的精準(zhǔn)命中,碩大的熒幕之上,比分被定格在了14:12,被寄予厚望的EDG戰(zhàn)隊(duì)以絕對的優(yōu)勢戰(zhàn)勝了BLG戰(zhàn)隊(duì),拿下了總決
  • 網(wǎng)紅炒股不為了賺錢,那就是耍流氓!

    來源:首席商業(yè)評(píng)論6月26日高調(diào)宣布入市,網(wǎng)絡(luò)名嘴大v胡錫進(jìn)居然進(jìn)軍了股市。在一次財(cái)經(jīng)媒體峰會(huì)上,幾個(gè)財(cái)經(jīng)圈媒體大佬就&ldquo;胡錫進(jìn)炒股是否知道認(rèn)真報(bào)道&rdquo;展開討論。有
  • 蘋果公司要求三星和LG Display生產(chǎn)「無邊框」OLED iPhone顯示屏

    據(jù) The Elec 報(bào)道,蘋果已要求其供應(yīng)商為未來的 iPhone 型號(hào)開發(fā)「無邊框」OLED 顯示面板。蘋果顯然已要求三星和 LG Display 開發(fā)新的 OLED 顯示面
  • OPPO K11評(píng)測:旗艦級(jí)IMX890加持 2000元檔最強(qiáng)影像手機(jī)

    【Techweb評(píng)測】中端機(jī)型用戶群體巨大,占了中國目前手機(jī)市場的大頭,一直以來都是各手機(jī)品牌的“必爭之地”,其中OPPO K系列機(jī)型一直以來都以高品質(zhì)、
  • Counterpoint :OPPO雙旗艦戰(zhàn)略全面落地 高端產(chǎn)品銷量增長22%

    2023年6月30日,全球行業(yè)分析機(jī)構(gòu)Counterpoint Research發(fā)布的《中國智能手機(jī)高端市場白皮書》顯示,中國智能手機(jī)品牌正在尋求高質(zhì)量發(fā)展,中國高端智能
Top 主站蜘蛛池模板: 辉南县| 西宁市| 九龙县| 清丰县| 老河口市| 浮梁县| 长沙市| 石柱| 中方县| 津南区| 铜鼓县| 红河县| 太谷县| 阿荣旗| 福安市| 云南省| 陕西省| 峡江县| 广平县| 琼海市| 彰化市| 车险| 铜川市| 饶阳县| 昌平区| 白城市| 广南县| 牟定县| 阳东县| 定结县| 织金县| 山西省| 绥宁县| 义乌市| 双牌县| 嘉义县| 永年县| 东山县| 迭部县| 康马县| 东乡族自治县|