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

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

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

來源: 責(zé)編: 時(shí)間:2024-07-01 17:13:43 185觀看
導(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 這是干嘛的 ?AlE28資訊網(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í)也有助于減輕對(duì)中心數(shù)據(jù)中心的網(wǎng)絡(luò)流量和負(fù)載。AlE28資訊網(wǎng)——每日最新資訊28at.com

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

二、WinDbg 分析

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

不同程序的卡死有不同的分析方式,所以要先鑒別下程序的類型以及主線程的調(diào)用棧即可,參考如下:AlE28資訊網(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è)線程都在做什么。AlE28資訊網(wǎng)——每日最新資訊28at.com

2. 線程都在干嘛

以我多年的分析經(jīng)驗(yàn),絕大多數(shù)都是由于 線程饑餓 或者說 線程池耗盡 導(dǎo)致的,首先我們看下線程池的情況。AlE28資訊網(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è)算多嗎?對(duì)于64core 來說,這個(gè)線程其實(shí)算是正常,訓(xùn)練營里的朋友都知道,server版的gc僅gc線程就有 64*2=128 個(gè),接下來再看一個(gè)指標(biāo)就是當(dāng)前是否存在任務(wù)積壓?可以使用 !ext tpq 命令,參考輸出如下:AlE28資訊網(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)了。AlE28資訊網(wǎng)——每日最新資訊28at.com

3. 真的不是線程饑餓嗎

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

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

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

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

相信有很多朋友對(duì)這個(gè)反經(jīng)驗(yàn)的東西很好奇為什么請求沒有積壓在線程池,其實(shí)這個(gè)考驗(yàn)的是你對(duì) PortableThreadPool 的底層了解,這里我就簡單說一下吧。AlE28資訊網(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)前的線程棧上給扒出來。AlE28資訊網(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è)周期,這就能解釋為什么線程池沒有積壓的底層原因了。AlE28資訊網(wǎng)——每日最新資訊28at.com

三、總結(jié)

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

本文鏈接:http://m.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)
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
久久亚洲综合色| 国模私拍视频一区| 国产日韩精品久久久| 91久久久亚洲精品| 国产性色一区二区| 欧美影院久久久| 国产欧美日韩另类视频免费观看| 一区二区在线观看视频| 宅男66日本亚洲欧美视频| 欧美一二三区在线观看| 欧美日韩91| 久久9热精品视频| 一区二区三区国产精品| 亚洲国产精品精华液2区45| 国产亚洲欧美色| 亚洲福利免费| 亚洲高清不卡av| 在线一区欧美| 一本一本久久| 欧美专区18| 欧美韩日一区二区| 久久在线观看视频| 欧美日韩久久精品| 欧美精品久久久久久| 麻豆精品精华液| 久久精品国产成人| 欧美中文字幕在线| 欧美日本高清视频| 国产在线观看精品一区二区三区 | 亚洲日产国产精品| 精品不卡视频| 激情丁香综合| 伊人激情综合| 中文日韩电影网站| 99这里有精品| 夜夜夜久久久| 久久久久久夜精品精品免费| 欧美中文字幕视频在线观看| 亚洲一区二区三区乱码aⅴ蜜桃女| 黄色av一区| 在线综合亚洲欧美在线视频| 亚洲专区免费| 性感少妇一区| 免费日韩成人| 欧美成人免费在线视频| 欧美韩日亚洲| 欧美日韩精品一区| 欧美日韩的一区二区| 国产精品ⅴa在线观看h| 国产精品久久久久7777婷婷| 国产精品婷婷午夜在线观看| 国产亚洲欧美日韩精品| 好吊视频一区二区三区四区| 亚洲国产精品久久久久秋霞不卡| 国产欧美日韩精品a在线观看| 国产女人aaa级久久久级| 亚洲国产视频a| 久久成人精品| 欧美成人日韩| 欧美人与禽猛交乱配| 欧美在线亚洲在线| 欧美日本在线| 亚洲国产精品欧美一二99| 久久精品亚洲乱码伦伦中文| 欧美黄色免费| 精品白丝av| 久久久久看片| 欧美大胆成人| 国产精品日本精品| 激情五月***国产精品| 91久久精品www人人做人人爽| 99re热这里只有精品免费视频| 狠狠狠色丁香婷婷综合激情| 亚洲午夜电影网| 欧美中文字幕久久| 国产精品网站视频| 国内成人精品一区| 亚洲精品欧美极品| 在线一区二区视频| 欧美日韩免费高清| 99国产精品99久久久久久粉嫩 | 一级日韩一区在线观看| 免费在线看一区| 国产精品亚洲一区| 激情欧美一区| 久久久噜噜噜久久人人看| 国产一区二区三区视频在线观看| 狠狠狠色丁香婷婷综合久久五月| 亚洲精选视频在线| 亚洲欧美日韩在线高清直播| 久久黄色影院| 国产亚洲精品7777| 久久精品国产一区二区三| 国产亚洲第一区| 中日韩美女免费视频网站在线观看| 久久久久久久97| 一区二区三区在线免费播放| 麻豆乱码国产一区二区三区| 欧美日韩国产在线看| 亚洲伦理在线观看| 久久久福利视频| 黄色一区二区三区| 麻豆91精品91久久久的内涵| 国产精品区免费视频| 欧美亚洲一区二区在线| 国产精品v欧美精品v日本精品动漫| 国产精品久久91| 亚洲欧美国产视频| 女仆av观看一区| 亚洲人成在线播放| 欧美日韩一区在线| 91久久国产综合久久91精品网站| 欧美一区中文字幕| 精品91在线| 香蕉久久精品日日躁夜夜躁| 欧美成人精品在线观看| 国产精品一区久久| 一区二区三区视频在线观看 | 欧美性做爰猛烈叫床潮| 在线看欧美日韩| 亚洲欧美日韩国产综合| 欧美日韩一区二区免费视频| 国产精品99久久久久久宅男 | 久久精品国产视频| 国产精品毛片| 久久精品国产久精国产思思| 国产精品免费aⅴ片在线观看| 99精品久久久| 欧美福利电影网| 亚洲图片在区色| 韩国女主播一区二区三区| 免费一级欧美片在线观看| 伊人久久大香线蕉综合热线| 欧美在线一二三| 亚洲高清自拍| 美女露胸一区二区三区| 一本色道久久综合亚洲精品小说 | 午夜久久影院| 国产精品美女一区二区在线观看| 极品中文字幕一区| 欧美a级片网| 亚洲欧美日韩另类精品一区二区三区| 国产精品高潮呻吟久久| 久久久久久久久综合| 国产日韩成人精品| 欧美亚洲一区三区| 亚洲国产精品一区在线观看不卡| 老司机午夜精品视频在线观看| 国产综合在线视频| 欧美日韩国产精品专区| 久久久久久久久久久一区| 一区精品久久| 欧美性大战久久久久久久蜜臀| 一区在线观看| 欧美日韩在线一区二区三区| 一本色道久久综合狠狠躁篇的优点 | 亚洲国产二区| 国产欧美91| 欧美人成网站| 久久综合图片| 亚洲人成网站在线播| 国产欧美日韩在线播放| 欧美剧在线观看| 亚洲天堂av在线免费| 伊人一区二区三区久久精品| 国产精品久久久久久久久久三级 | 国产精品久久久久久久久| 美女视频黄免费的久久| 欧美一级一区| 亚洲午夜精品国产| 亚洲人妖在线| 在线观看日韩av电影| 欧美精品一区在线播放| 久久久久九九九九| 亚洲一区二区三区在线观看视频| 欧美精品v日韩精品v国产精品| 亚洲精品视频免费在线观看| 欧美日韩亚洲另类| 老司机aⅴ在线精品导航| 午夜精品久久久久久| 国内精品久久久久影院优| 欧美三级欧美一级| 欧美精品v国产精品v日韩精品| 日韩一级精品| 国产精品社区| 欧美日韩小视频| 欧美韩日高清| 午夜日韩在线观看| 一区二区动漫| 99精品久久久| 亚洲精品午夜精品| 亚洲黄一区二区| 国产精品久久久久一区二区| 欧美日本中文| 欧美激情综合色| 欧美国产综合| 欧美激情一区二区久久久| 欧美成熟视频| 欧美电影免费观看| 欧美激情综合色综合啪啪| 欧美激情按摩| 欧美日韩大片一区二区三区| 欧美日韩久久久久久| 久久人人看视频|