精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

記一次 .NET 某酒店后臺服務卡死分析

開發 前端
我現在知道這個 url 某個時段可能響應出了問題,但我線程池里的線程增速應該很快呀,多余的線程不是可以響應客戶端請求嗎?為什么我發現的情況是全部卡死呢?

一、背景

1. 講故事

停了一個月沒有更新文章了,主要是忙于寫 C#內功修煉系列的PPT,現在基本上接近尾聲,可以回頭繼續更新這段時間分析dump的一些事故報告,有朋友微信上找到我,說他們的系統出現了大量的http超時,程序不響應處理了,讓我幫忙看下怎么回事,dump也抓到了。

二、WinDbg分析

1. 為什么會出現請求超時

既然超時說明server端不響應這個請求,繼而達到了超時時間的一種異常情況,所以首先要想到的就是 線程池的健康度,可以用 !tp 命令觀察,輸出如下:

0:000> !tp
CPU utilization: 0%
Worker Thread: Total: 537 Running: 537 Idle: 0 MaxLimit: 32767 MinLimit: 12
Work Request in Queue: 82
    Unknown Function: 00007fff566a17d0  Context: 0000020f08cbd658
    Unknown Function: 00007fff566a17d0  Context: 0000020f09acfa80
    Unknown Function: 00007fff566a17d0  Context: 0000020f08702198
    Unknown Function: 00007fff566a17d0  Context: 0000020f09ad9068
    Unknown Function: 00007fff566a17d0  Context: 0000020f09abffe8
    Unknown Function: 00007fff566a17d0  Context: 0000020f093c9948
    Unknown Function: 00007fff566a17d0  Context: 0000020f093cfd28
    Unknown Function: 00007fff566a17d0  Context: 0000020f093d9358
    Unknown Function: 00007fff566a17d0  Context: 0000020f093c34e8
    Unknown Function: 00007fff566a17d0  Context: 0000020f093dc568
    ...
--------------------------------------
Number of Timers: 2
--------------------------------------
Completion Port Thread:Total: 2 Free: 2 MaxFree: 24 CurrentLimit: 2 MaxLimit: 1000 MinLimit: 12

從上面的卦象看異常非常明顯,線程池總共有 537個工作線程都是處于運行狀態,相信有經驗的朋友應該一眼就知道是怎么回事,專業術語叫:線程饑餓,并且線程池隊列也積壓了 82個 待處理的任務。

2. 線程為什么會饑餓

線程饑餓的原因有更多,我特意問了下 chatgpt,列舉如下:

  • 優先級傾斜:如果某些線程的優先級設置過高,而其他線程的優先級設置過低,高優先級的線程可能會長時間占用CPU資源,導致低優先級線程無法獲得執行機會。
  • 死鎖:當多個線程相互等待對方釋放資源時,可能會導致死鎖。在死鎖情況下,所有線程都無法繼續執行,從而導致線程饑餓。
  • 資源競爭:多個線程競爭有限的資源(如共享內存、文件、網絡連接等)時,可能會導致某些線程長時間無法獲取到所需的資源而處于饑餓狀態。
  • 不公平的調度策略:調度器可能存在不公平的調度策略,導致某些線程無法獲得公平的CPU時間片,從而長時間無法執行。
  • 線程阻塞:某些線程可能由于等待I/O操作、鎖或其他原因而被阻塞,如果阻塞時間過長,可能導致其他線程饑餓。
  • 線程池配置不當:如果線程池中的線程數量設置不當,可能會導致某些任務長時間等待執行,從而引發線程饑餓。

那到底是哪一種情況呢?可以用 ~*e !clrstack 看一下各個線程此時正在做什么,輸出如下:

0:000> ~*e !clrstack
...
OS Thread Id: 0x2924 (74)
        Child SP               IP Call Site
000000e0ef47dc30 00007fff60fd6974 [GCFrame: 000000e0ef47dc30] 
000000e0ef47dd58 00007fff60fd6974 [HelperMethodFrame_1OBJ: 000000e0ef47dd58] System.Threading.Monitor.ObjWait(Boolean, Int32, System.Object)
000000e0ef47de70 00007ffef33e7269 System.Threading.ManualResetEventSlim.Wait(Int32, System.Threading.CancellationToken)
000000e0ef47df00 00007ffef33e6b58 System.Threading.Tasks.Task.SpinThenBlockingWait(Int32, System.Threading.CancellationToken)
000000e0ef47df70 00007ffef33e69e1 System.Threading.Tasks.Task.InternalWait(Int32, System.Threading.CancellationToken)
000000e0ef47e040 00007ffef60cce33 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)
000000e0ef47e070 00007ffef9df2c73 Exceptionless.Submission.DefaultSubmissionClient.SendHeartbeat(System.String, Boolean, Exceptionless.ExceptionlessConfiguration)
000000e0ef47e110 00007ffef109f03f System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
000000e0ef47e1e0 00007ffef109e784 System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
000000e0ef47e210 00007ffef15b670b System.Threading.TimerQueueTimer.CallCallback()
000000e0ef47e270 00007ffef15b644d System.Threading.TimerQueueTimer.Fire()
000000e0ef47e2e0 00007ffef15b5613 System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
000000e0ef47e320 00007ffef10b8319 System.Threading.ThreadPoolWorkQueue.Dispatch()
000000e0ef47e7a0 00007fff4fa06993 [DebuggerU2MCatchHandlerFrame: 000000e0ef47e7a0] 
000000e0ef47e908 00007fff4fa06993 [ContextTransitionFrame: 000000e0ef47e908] 
000000e0ef47eb40 00007fff4fa06993 [DebuggerU2MCatchHandlerFrame: 000000e0ef47eb40] 
...

發現有 473 個線程都在 Exceptionless.Submission.DefaultSubmissionClient.SendHeartbeat 方法上進行等待,這就有意思了,原來是開源的日志收集組件發送的心跳檢測方法,接下來趕緊看一下這個方法的源碼。

public void SendHeartbeat(string sessionIdOrUserId, bool closeSession, ExceptionlessConfiguration config)
{
 if (!config.IsValid)
 {
  return;
 }
 string requestUri = $"{GetHeartbeatServiceEndPoint(config)}/events/session/heartbeat?id={sessionIdOrUserId}&close={closeSession}";
 try
 {
  _client.Value.AddAuthorizationHeader(config.ApiKey);
  _client.Value.GetAsync(requestUri).ConfigureAwait(continueOnCapturedContext: false).GetAwaiter()
   .GetResult();
 }
 catch (Exception exception)
 {
  config.Resolver.GetLog().Error("Error submitting heartbeat: " + exception.GetMessage());
 }
}

從源碼看,居然用同步的方式發送 http請求,在這異步方法滿天飛的世界里,上面的寫法實屬異類。

3. 該如何解決呢?

既然是 Exceptionless 內部寫的 SendHeartbeat 方法,我們程序員基本上無法干預,能做到的無非如下兩點:

  • 升級框架

看下了用的還是超老的 4.3 版本,可以升級到目前最新的 6.0.4 觀察試試。

[assembly: AssemblyTitle("Exceptionless")]
[assembly: AssemblyProduct("Exceptionless")]
[assembly: AssemblyCompany("Exceptionless")]
[assembly: AssemblyTrademark("Exceptionless")]
[assembly: AssemblyCopyright("Copyright (c) 2017 Exceptionless.  All rights reserved.")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("4.3.2027.0")]
[assembly: AssemblyInformationalVersion("4.3.2027$(VERSION_SUFFIX) f8d73f2fd7")]
[assembly: TargetFramework(".NETFramework,Version=v4.5", FrameworkDisplayName = ".NET Framework 4.5")]
[assembly: AssemblyVersion("4.3.2027.0")]

圖片圖片

  • 使用替代品,或者不用

哈哈,不用它,這是萬能的治根之法。

三、對線程注入速度的解答

1. 朋友提了一個疑問

我現在知道這個 url 某個時段可能響應出了問題,但我線程池里的線程增速應該很快呀,多余的線程不是可以響應客戶端請求嗎?為什么我發現的情況是全部卡死呢?

2. 疑問的簡單解答

這個問題其實是考察對線程池底層的了解,尤其是多久會向線程池注入一個活線程,在 .NET Framework 時代,在線程饑餓的情況下線程池內部的 GateThread線程 會 1s 注入一個活線程,那如何驗證呢?我們觀察后續的線程創建時間即可,使用 ~*e .ttime 。

0:000> ~*e .ttime
...
Created: Thu Nov 16 11:10:21.582 2023 (UTC + 8:00)
Kernel:  0 days 0:00:00.000
User:    0 days 0:00:00.000
Created: Thu Nov 16 11:10:22.593 2023 (UTC + 8:00)
Kernel:  0 days 0:00:00.000
User:    0 days 0:00:00.000
Created: Thu Nov 16 11:10:23.562 2023 (UTC + 8:00)
Kernel:  0 days 0:00:00.000
User:    0 days 0:00:00.000
Created: Thu Nov 16 11:10:24.062 2023 (UTC + 8:00)
Kernel:  0 days 0:00:00.000
User:    0 days 0:00:00.000
Created: Thu Nov 16 11:10:24.577 2023 (UTC + 8:00)
Kernel:  0 days 0:00:00.000
User:    0 days 0:00:00.000
Created: Thu Nov 16 11:10:25.562 2023 (UTC + 8:00)
Kernel:  0 days 0:00:00.000
User:    0 days 0:00:00.000
Created: Thu Nov 16 11:10:26.562 2023 (UTC + 8:00)
Kernel:  0 days 0:00:00.000
User:    0 days 0:00:00.015
Created: Thu Nov 16 11:10:27.562 2023 (UTC + 8:00)
Kernel:  0 days 0:00:00.000
User:    0 days 0:00:00.015
Created: Thu Nov 16 11:10:28.562 2023 (UTC + 8:00)
Kernel:  0 days 0:00:00.000
User:    0 days 0:00:00.015
Created: Thu Nov 16 11:10:29.577 2023 (UTC + 8:00)
Kernel:  0 days 0:00:00.000
User:    0 days 0:00:00.015
Created: Thu Nov 16 11:10:30.562 2023 (UTC + 8:00)
Kernel:  0 days 0:00:00.000
User:    0 days 0:00:00.000

從卦中的輸出來看,每一個 Created 大概差 1s 鐘,這也是 GateThread 的功勞,這種注入速度在 .NET8 中已經做了優化,比如上面這種情況,Task 內部會主動喚醒 GateThread 線程讓其立即注入新線程,從而提升程序的響應速度。

四、總結

很多時候分析下來發現是 第三方組件 拖垮了程序,自己又沒有太多的介入能力,真的很無奈,框架都用了那么久,現在看到了一只蒼蠅,已是食之無味,棄之可惜。

責任編輯:武曉燕 來源: 一線碼農聊技術
相關推薦

2022-10-13 18:40:05

.NETOA后端

2023-09-27 07:23:10

.NET監控軟件

2022-01-17 21:28:36

管理系統.NET

2024-07-01 13:00:24

.NET網絡邊緣計算

2024-11-29 10:06:59

2023-05-15 11:15:50

.NET門診語句

2024-09-14 10:28:56

.NET卡死程序

2025-09-02 01:35:00

.NET光學定位軟件

2024-06-06 10:51:15

自動化系統推測

2024-05-28 10:18:30

WPF程序數據

2023-06-26 00:12:46

2024-12-27 13:31:18

.NETdump調試

2024-03-28 12:56:36

2023-04-06 10:52:18

2023-07-06 10:11:38

.NET模式dump

2024-07-12 11:20:34

.NET崩潰視覺程序

2024-03-26 00:44:53

.NETCIM系統

2023-03-26 20:24:50

ERP網站系統

2022-10-25 14:17:01

.NET代碼程序

2024-07-09 11:51:20

Windows線程池源碼
點贊
收藏

51CTO技術棧公眾號

久久男人中文字幕资源站| 欧美成人日韩| 欧美性xxxxx极品少妇| 四虎影视永久免费在线观看一区二区三区| 中文字幕69页| av亚洲免费| 欧美一区二区三区影视| 国产欧美日韩小视频| 性感美女福利视频| 日本成人在线视频网站| 久久久999成人| 年下总裁被打光屁股sp| 日本在线播放一二三区| 国产欧美一区二区精品性色 | 国产一区二区你懂的| 亚洲欧美自拍一区| 奇米777在线视频| 一根才成人网| 亚洲免费成人av| 欧美极品jizzhd欧美| 国产精品无码AV| 免费日韩一区二区| 色综合天天综合网国产成人网| 少妇户外露出[11p]| 9999精品视频| 色婷婷久久99综合精品jk白丝| 福利在线小视频| 国产精品久久久久久久龚玥菲| 国产不卡视频一区二区三区| 国产精品日韩电影| 91午夜视频在线观看| 日韩成人a**站| 精品一区二区三区电影| 日本少妇一区二区三区| 日韩一级二级| 红桃视频成人在线观看| 黄色一级视频播放| 成人精品一区二区三区免费 | 欧美最猛性xxxxx直播| wwwwww欧美| 拍真实国产伦偷精品| 久久综合中文字幕| 国产伦精品一区二区三区视频孕妇| 中文字幕在线网址| 久久一日本道色综合久久| 欧美激情18p| 成人免费视频网站入口::| 精品国产网站| 国产亚洲成精品久久| av黄色一级片| 精品人人人人| 精品sm在线观看| 蜜桃色一区二区三区| 91成人小视频| 91麻豆精品国产91久久久使用方法| 爱情岛论坛成人| 日韩欧美一区二区三区在线观看| 欧美色xxxx| 波多野结衣家庭教师视频| 1234区中文字幕在线观看| 一区二区三区欧美亚洲| 无码人妻精品一区二区三区99v| 在线免费观看黄色| 亚洲国产精华液网站w | 免费人成在线观看网站| av中文字幕在线不卡| 国产伦精品一区二区三区免费视频| 亚洲国产精品久久久久爰性色 | 国产午夜视频在线观看| 久久精品男人的天堂| 日韩精品另类天天更新| av在线电影院| 最新国产精品久久精品| 中文字幕av久久| 在线电影福利片| 亚洲国产日韩av| 欧美,日韩,国产在线| 色多多在线观看| 日本乱码高清不卡字幕| www.天天射.com| 在线视频成人| 精品国产一区二区在线观看| 成年人的黄色片| 国产探花一区在线观看| 中文字幕视频一区二区在线有码| 欧美性生给视频| 国产精品v一区二区三区| 欧美精品videosex性欧美| 日本在线观看视频网站| 久久亚洲美女| 91久久国产婷婷一区二区| 午夜精品久久久久久久99老熟妇| av电影一区二区| 色视频一区二区三区| 日本综合在线| 亚洲自拍偷拍综合| 国产极品美女高潮无套久久久| 开心久久婷婷综合中文字幕| 欧美大胆人体bbbb| 麻豆精品免费视频| 综合久久婷婷| 日本一本a高清免费不卡| 一级做a爰片久久毛片16| 国产成人激情av| 日韩精品第一页| 欧美韩日亚洲| 欧美色精品天天在线观看视频| 97免费公开视频| 在线一级成人| 精品少妇v888av| 中文字幕高清在线免费播放| 国产在线视频一区二区| 久久99精品国产99久久| 免费在线你懂的| 欧美性猛交xxxx| 日日夜夜精品视频免费观看| 国产成人三级| 久久99精品久久久久久琪琪| 国产精品午夜一区二区| 成人免费毛片片v| 台湾成人av| 美女露胸视频在线观看| 制服丝袜中文字幕亚洲| 久久精品国产亚洲av久| 一区在线观看| 亚洲va久久久噜噜噜| 美国一级片在线免费观看视频 | 国产盗摄女厕一区二区三区| 欧洲精品久久| 狠狠躁少妇一区二区三区| 欧美精品粉嫩高潮一区二区| www.狠狠爱| 国产精品日韩欧美一区| 亚洲已满18点击进入在线看片| 国产在线黄色| 狠狠色香婷婷久久亚洲精品| 久久国产免费视频| 一本一道久久a久久精品蜜桃| 日本精品性网站在线观看| 亚洲欧美激情在线观看| 亚洲黄色av一区| 蜜桃福利午夜精品一区| 不卡中文字幕| 国产精品成熟老女人| 午夜在线视频免费| 亚洲va中文字幕| 精品伦一区二区三区| 欧美久久一级| 91视频最新| 性网站在线观看| 欧美一区二区女人| 国产美女久久久久久| 久久99精品国产麻豆不卡| 天堂资源在线亚洲视频| 日韩三区在线| 国产一区二区三区在线视频| 国产91国语对白在线| 久久久国产一区二区三区四区小说 | jizzjizz欧美69巨大| 国产97色在线|日韩| 国产又爽又黄网站亚洲视频123| 性久久久久久久久久久久| 欧美日韩一区二区区别是什么| 欧美一区二区三区久久精品茉莉花| 成人有码视频在线播放| av片在线观看网站| 欧美v日韩v国产v| www.天天色| 91蝌蚪porny九色| 日韩一级免费在线观看| 国内精品视频在线观看 | 亚洲欧洲日韩精品在线| 日韩在线观看av| 午夜精品久久久久久久爽| 亚洲图片欧美色图| 一卡二卡三卡四卡| 人禽交欧美网站| 中日韩在线视频| jizz性欧美23| 欧美专区在线视频| av午夜在线| 欧美一区日本一区韩国一区| 久久久全国免费视频| www成人在线观看| 国产免费又粗又猛又爽| 雨宫琴音一区二区三区| 国产一区二区高清不卡| 经典三级一区二区| yellow中文字幕久久| 亚洲精品第五页| 色哟哟一区二区在线观看| 免费一级suv好看的国产网站 | 免费黄色三级网站| 日本视频中文字幕一区二区三区| 中国人体摄影一区二区三区| 粉嫩的18在线观看极品精品| 国产成人精品视频在线观看| 中文字幕资源网在线观看| 日韩av在线免费播放| 正在播放亚洲精品| 一级女性全黄久久生活片免费| 日本japanese极品少妇| 麻豆久久久久久久| 国产自产在线视频| 日韩理论电影院| 国产在线精品一区二区三区| 国产91在线精品| 欧美精品videosex极品1| а天堂8中文最新版在线官网| 精品美女在线播放| 中文在线最新版天堂| 亚洲大片免费看| 老司机成人免费视频| 久久亚洲一区二区三区四区| 波多野结衣在线免费观看| 亚洲欧美网站| 日本精品免费视频| 国产一区二区三区91| 99国产在线视频| 久久99国产精品二区高清软件| 97在线免费观看视频| 免费网站免费进入在线| 亚洲国产精品久久久久久| 一本一道人人妻人人妻αv| 日韩欧美国产激情| 日韩免费一二三区| 亚洲人成亚洲人成在线观看图片 | www.综合色| 欧美日韩国产高清一区二区| 中文字幕av影院| 午夜精品视频在线观看| 欧美成人黄色网| 亚洲欧美综合色| 我不卡一区二区| 久久奇米777| 亚洲精品女人久久久| 成人免费视频国产在线观看| a级大片免费看| 国产一区视频网站| 嫩草影院国产精品| 日韩精品一二三四| 欧美精品色婷婷五月综合| 在线观看一区视频| 亚洲一区二区三区av无码| 亚洲精品一二三区区别| 一区二区三区欧美在线| 欧洲激情综合| 先锋影音一区二区三区| 国产影视精品一区二区三区| 欧美三级华人主播| 免费看av成人| 欧美日韩在线一区二区三区| 亚洲涩涩av| 欧美一区1区三区3区公司| 亚洲综合小说图片| 欧美18视频| 欧美男男gaytwinkfreevideos| 玛丽玛丽电影原版免费观看1977| 婷婷精品在线| 区一区二区三区中文字幕| 欧美日韩播放| 亚洲欧美久久234| 国产大片一区| 久久视频免费在线| 欧美三级小说| 人妻久久久一区二区三区| 亚洲巨乳在线| 欧美性久久久久| 日韩av高清在线观看| 香蕉视频禁止18| 国产一区二区三区免费看| 亚洲精品日韩在线| 樱花草www在线| 国产成人在线视频网站| jjzz黄色片| 久久视频一区二区| 懂色av蜜桃av| 亚洲情趣在线观看| 国产第一页在线播放| 大荫蒂欧美视频另类xxxx| 精品人妻一区二区三区潮喷在线 | 久久婷婷综合激情| 国产精品1区2区3区4区| 亚洲精品中文在线观看| 国产真实乱偷精品视频| 欧美性xxxxxxx| 一区二区美女视频| 亚洲国产成人精品久久久国产成人一区 | 欧美精品99久久久**| 午夜精品一区二区三| 日韩电影网在线| 三区四区电影在线观看| 欧美日本黄视频| 成人啊v在线| 国产精品9999久久久久仙踪林| 国产成人精品免费视| japanese在线播放| 久久精品导航| 日批视频在线看| 欧美激情一区二区三区不卡| 国产又黄又爽又无遮挡| 日韩欧美在线视频日韩欧美在线视频 | 调教+趴+乳夹+国产+精品| 中国一级片黄色一级片黄| 精品久久久久久久久久久久久久久久久| 你懂的在线网址| 欧美日本国产在线| 黄色日韩网站| 欧美日韩免费高清| 欧美精品三区| www.超碰97.com| www激情久久| 九热这里只有精品| 欧美精品在线观看一区二区| 天天射,天天干| 美日韩精品免费观看视频| 日本成人伦理电影| 国产另类自拍| 欧美高清一区| 在线能看的av网站| 久久久久久久久久电影| 日韩手机在线观看| 欧美一区二区三区视频在线| 国产美女视频一区二区三区| 91精品国产高清自在线| 亚洲一区网址| 大地资源网在线观看免费官网| 麻豆国产欧美一区二区三区| 日本japanese极品少妇| 亚洲成人免费看| 精品国产av一区二区| 色吧影院999| 久久天堂av| 日本一区二区三区四区高清视频| 亚洲毛片在线| 一本加勒比波多野结衣| 亚洲综合无码一区二区| 国产毛片一区二区三区va在线| 伊人久久五月天| 视频二区不卡| 欧美一区1区三区3区公司| 国产亚洲激情| 在线观看国产三级| 午夜视频一区二区| 欧美少妇bbw| 性欧美视频videos6一9| 136福利精品导航| 日韩精品久久一区二区| 国产精品亚洲午夜一区二区三区| 波多野结衣久久久久| 欧美日韩精品一区视频| 免费av在线| 91牛牛免费视频| 欧美ab在线视频| 午夜性福利视频| 日韩av片在线| 欧美乱妇一区二区三区不卡视频| 日本高清视频在线观看| 91久久精品视频| 亚洲欧美综合| 亚洲av无码一区东京热久久| 亚洲成精国产精品女| 婷婷久久久久久| 欧美在线欧美在线| 欧美伦理在线视频| 激情在线观看视频| 一区二区成人在线| 天堂av在线资源| 国产精品高潮粉嫩av| 手机在线电影一区| 亚洲一区二区三区四区精品| 一区二区在线看| 天天操天天干天天舔| 欧日韩不卡在线视频| 欧美亚洲国产精品久久| 免费网站在线观看黄| 一区二区三区精品在线观看| 蜜臀av午夜精品| 国产成人精品亚洲精品| 性欧美69xoxoxoxo| 污网站免费观看| 在线观看日韩毛片| 中文字幕有码在线视频| 国模一区二区三区私拍视频| 日韩精品电影一区亚洲| 午夜国产福利一区二区| 亚洲电影免费观看高清| 先锋欧美三级| 日本福利视频网站| 久久久久久久国产精品影院| 国产一区二区三区视频免费观看| 欧美黑人巨大精品一区二区| 亚洲精品**不卡在线播he| 欧美日韩中文不卡| 亚洲已满18点击进入久久| 黄色片免费在线| 99久久无色码| 日韩中文字幕不卡| 精品视频久久久久| 国产亚洲欧洲在线|