精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

中文字幕亚洲自拍| 在线看国产一区二区| 99国产在线观看| 免费观看成人毛片| 日韩精品免费一区二区三区| 欧美精品tushy高清| 精品丰满人妻无套内射| 黑人与亚洲人色ⅹvideos| 青草av.久久免费一区| 久久999免费视频| 免费看黄色的视频| 亚洲经典视频| 欧亚洲嫩模精品一区三区| 国产一级大片免费看| 国产香蕉在线| 成人激情视频网站| 国产一区二区丝袜| 日本中文字幕久久| 黑人一区二区| 最近2019中文免费高清视频观看www99 | 欧美激情喷水| 亚洲激情校园春色| 日本一区视频在线观看| 国产1区在线观看| 久久成人av少妇免费| 国产91精品黑色丝袜高跟鞋| 全程偷拍露脸中年夫妇| 日韩欧美中字| 亚洲日本欧美中文幕| 在线xxxxx| 欧美黄视频在线观看| 欧美日韩一区不卡| 无码内射中文字幕岛国片| av老司机在线观看| 一区二区高清免费观看影视大全| 亚洲精品影院| av在线电影观看| 久久久久久久久久看片| 国产精品果冻传媒潘| 国产福利免费视频| 久久成人免费电影| 国产精品中文字幕久久久| 久久亚洲精品石原莉奈| 亚洲影院免费| 91av成人在线| 久久精品国产成人av| 在线亚洲成人| 2024亚洲男人天堂| 日韩一区二区视频在线| 亚洲一区成人| 欧美在线视频一二三| 五月婷婷色丁香| 国产精品人人爽人人做我的可爱 | 久久91导航| 日韩欧美在线视频免费观看| 日韩手机在线观看视频| 五月激情久久| 欧美日韩精品久久久| 在线免费观看视频黄| 日本久久久久| 日韩一区二区精品| 日韩精品人妻中文字幕有码| 欧美人妖视频| 国产视频久久久| 天天躁夜夜躁狠狠是什么心态| 国产一区二区三区探花| 中文字幕在线成人| 国产免费无码一区二区视频| 亚洲午夜极品| 69国产精品成人在线播放| 黑人精品无码一区二区三区AV| 久久精品人人| 国产专区精品视频| 精品女同一区二区三区| 99re亚洲国产精品| 日韩成人在线资源| a在线免费观看| 午夜电影一区二区三区| 男人舔女人下面高潮视频| 国产精品麻豆成人av电影艾秋| 欧美日韩高清影院| 黄色在线免费播放| 国产最新精品| 精品少妇v888av| 青青草免费观看视频| 久久国产夜色精品鲁鲁99| 91手机在线播放| 免费在线看v| 日韩毛片视频在线看| 国产乱人伦精品一区二区三区| 中文字幕在线官网| 8x福利精品第一导航| 黄色网址在线视频| 国产韩国精品一区二区三区| 久久久这里只有精品视频| 无码人妻精品一区二区三区不卡| 麻豆精品视频在线| 久久久综合亚洲91久久98| 日本暖暖在线视频| 欧美日韩美女在线观看| 日韩av片免费观看| 综合干狼人综合首页| 久久91亚洲人成电影网站| 久久久久久亚洲av无码专区| 丁香婷婷深情五月亚洲| 亚洲精品成人久久久998| 91福利在线免费| 91.com在线观看| 国产美女免费网站| 亚洲国产精品第一区二区三区 | 一级特黄录像免费看| 91色.com| 日韩精品免费一区| 日韩专区视频网站| 国产一区av在线| 色网站在线播放| 国产成人自拍在线| 伦理中文字幕亚洲| 中国一级免费毛片| 高清在线不卡av| 日日噜噜噜夜夜爽爽| 影视一区二区三区| 国产网站欧美日韩免费精品在线观看 | 天天摸天天干天天操| 亚洲欧美一区二区久久| 国产免费又粗又猛又爽| 精品高清在线| 日本a级片电影一区二区| 人妻少妇精品无码专区久久| 亚洲精品综合在线| 一区二区久久精品| 99精品网站| 国产精品日韩电影| av天在线观看| 欧美在线免费观看亚洲| 日韩一级av毛片| 免费在线日韩av| 久久影视中文粉嫩av| 伊人成综合网站| 日韩精品免费在线视频| 国内免费精品视频| 91在线视频在线| 国产午夜伦鲁鲁| 亚洲自拍电影| 日本电影亚洲天堂| 麻豆app在线观看| 色婷婷久久久久swag精品| 女~淫辱の触手3d动漫| 亚洲欧美大片| 欧美三日本三级少妇三99| 欧美黄色网页| 中文字幕最新精品| 一级黄色大毛片| 亚洲丝袜精品丝袜在线| 亚洲成人手机在线观看| 国产精品观看| 精品乱色一区二区中文字幕| freexxx性亚洲精品| 国产丝袜一区二区三区免费视频 | 欧美一区二区视频观看视频| 久久国产精品波多野结衣| 成人性视频网站| 日韩a∨精品日韩在线观看| 牛牛影视一区二区三区免费看| 97香蕉超级碰碰久久免费软件 | 久久久久久久久久久人体| 欧美特级特黄aaaaaa在线看| 狠狠干狠狠久久| 蜜臀久久99精品久久久久久| 韩国三级在线一区| 久青草视频在线播放| 欧美wwwwww| 国产精品久久久久久久久久免费| 日本中文字幕在线观看| 欧美变态口味重另类| 好吊操这里只有精品| 国产欧美一区二区精品久导航| 制服丝袜中文字幕第一页| 午夜日韩视频| 麻豆av一区二区三区| 色999久久久精品人人澡69| 久久久久久美女| 国产一区二区三区福利| 欧美一级片免费看| 亚洲欧美综合自拍| 亚洲欧美一区二区三区孕妇| 泷泽萝拉在线播放| 久久99久久99| 看av免费毛片手机播放| 91精品综合| 久久综合久久久| 伊人久久一区| 青青草精品毛片| av网址在线免费观看| 日韩久久精品电影| 国产男女猛烈无遮挡| 色先锋aa成人| 国产极品美女高潮无套嗷嗷叫酒店| 国产日韩精品一区二区浪潮av| 日本泡妞xxxx免费视频软件| 日韩精品欧美精品| www.av片| 91精品电影| 区一区二区三区中文字幕 | 天天人人精品| 国产精品白浆| 91香蕉亚洲精品| 亚洲电影有码| 91chinesevideo永久地址| a毛片在线播放| 在线播放日韩专区| 青青草视频在线观看| 精品99999| 国产suv一区二区| 欧美在线免费播放| 国产三级av片| 亚洲高清中文字幕| 91插插插插插插| 中文字幕乱码一区二区免费| 无码人妻精品一区二区三区温州| 成人午夜精品一区二区三区| 午夜av中文字幕| 蜜桃一区二区三区在线| 加勒比色综合久久久久久久久| 亚洲欧美中文另类| 天堂国产一区二区三区| 精品捆绑美女sm三区| 国产免费一区二区三区免费视频| 欧美日韩中文字幕精品| 日产精品久久久| 精品国产精品自拍| 五月天婷婷丁香| 亚洲一区二区成人在线观看| 欧美激情一区二区视频| 亚洲卡通动漫在线| 午夜免费激情视频| 亚洲欧美电影院| 男人操女人的视频网站| 亚洲色图清纯唯美| 欧美视频www| 亚洲激情一二三区| 青青草精品在线视频| 亚洲另类中文字| 成人免费精品动漫网站| 亚洲欧美日韩国产一区二区三区 | 亚洲男人的天堂在线aⅴ视频| 91香蕉视频网| 亚洲图片激情小说| 欧美成欧美va| 亚洲五月六月丁香激情| 日韩精品久久久久久久酒店| 午夜日韩在线观看| 五月天婷婷激情| 日本丶国产丶欧美色综合| 黄色大全在线观看| 欧美日韩国产一二三| av加勒比在线| 亚洲精品一区二区三区精华液 | 国产精品美女久久久久久| 国产精品麻豆免费版现看视频| 中文字幕一区二区三区色视频| 91麻豆精品成人一区二区| 亚洲国产一区二区三区青草影视| 精品无码久久久久| 色综合久久99| 91激情在线观看| 欧美成人一区二区三区片免费| 丰满人妻妇伦又伦精品国产| 日韩福利在线播放| 在线观看av的网站| 欧美国产日本高清在线| 裤袜国产欧美精品一区| 国产情人节一区| 超碰97久久| 日本一区二区高清视频| 偷拍欧美精品| 人人干视频在线| 麻豆国产精品官网| 在线播放第一页| 久久精品一区二区三区av | 福利精品视频在线| 97超碰国产在线| 亚洲精品99999| 色的视频在线免费看| 久久久久久伊人| se69色成人网wwwsex| 国产精品一区二区欧美黑人喷潮水| 蜜桃一区二区| 特级西西人体www高清大胆| 午夜一区二区三区不卡视频| 亚洲综合伊人久久| 久久亚洲二区三区| 青娱乐免费在线视频| 欧美亚洲尤物久久| 天天综合在线视频| 久久久av网站| 欧美成人性网| 国产精品视频免费观看| 天天射天天综合网| 久久久久国产精品熟女影院| 高清在线不卡av| а天堂中文在线资源| 黑人精品xxx一区一二区| 精品美女www爽爽爽视频| 这里只有视频精品| 一二三四视频在线中文| 国产91社区| 国产精品久久久久一区二区三区厕所| 久久精品.com| 成人午夜av在线| 午夜精品一区二区三级视频| 日本韩国视频一区二区| 神马一区二区三区| 欧美丰满少妇xxxxx| 欧美成人黄色| 日韩av一区二区三区在线| 先锋影音久久久| 久久久午夜精品福利内容| 一区二区三区四区激情| 97免费观看视频| 中文字幕在线日韩| 欧美日韩国产网站| 亚欧精品在线| 日精品一区二区三区| 3d动漫精品啪啪一区二区下载| 亚洲国产精品久久人人爱| 成人av手机在线| 麻豆国产精品va在线观看不卡| 成人精品视频在线观看| 一区二区精品国产| 青青青伊人色综合久久| 日本爱爱爱视频| 91国偷自产一区二区开放时间| 激情小视频在线观看| 情事1991在线| 国产一区二区三区四区五区 | 国产精品999在线观看| 亚洲第一精品夜夜躁人人爽| 国产蜜臀在线| 国产日韩精品久久| 亚洲欧美日本国产专区一区| 国产精品亚洲无码| 日本国产一区二区| 国产一二三区在线| 国产区精品在线观看| 四虎国产精品免费观看| 超碰人人草人人| 一区二区三区四区在线免费观看| 亚洲精品一区二区三区新线路| 欧美激情精品久久久久久| 国产精品香蕉| 久久精品免费一区二区| 国产亚洲午夜高清国产拍精品| 亚洲午夜无码久久久久| 日韩中文在线中文网三级| 香蕉久久一区| 日韩精品免费一区| 91尤物视频在线观看| 日韩电影在线观看一区二区| 中文字幕在线国产精品| 日韩免费一级| 久久久久久久久久久99| 国产人伦精品一区二区| 国产精品一区二区人人爽| 久久久国产一区| 91精品短视频| 日本a级片免费观看| 欧美国产综合色视频| 精品人妻一区二区三区含羞草| 久久免费精品日本久久中文字幕| 最新亚洲精品| 999这里有精品| 天天综合色天天综合| 成a人片在线观看www视频| 91黄在线观看| 久久精品卡一| 日本妇女毛茸茸| 亚洲欧洲av一区二区| 久久av网站| 久久久免费视频网站| 自拍av一区二区三区| 亚洲区小说区图片区| 国产日韩精品视频| 夜久久久久久| 免费在线观看a级片| 精品亚洲一区二区三区四区五区| 国产91精品在线| 成人在线视频一区二区三区| 久久久久久久久久久电影| 国产成人精品无码高潮| 国产成人一区二区三区电影| 欧美精品自拍| 中文字幕第二区| 亚洲国产99精品国自产| 精品176极品一区| 那种视频在线观看| 亚洲最色的网站| 欧美成人精品一区二区男人看| 精品国产乱码久久久久久久软件| 久久99精品国产.久久久久久|