一:背景
1. 讲故事
大概有两个月没写博客了,关注我的朋友应该知道我最近都把精力花在了星球,这两个月时间也陆陆续续的有朋友求助如何分析dump,有些朋友太客气了,给了大大的红包,哈哈😅,手里面也攒了10多个不同问题类型的dump,后续也会逐一将分析思路贡献出来。
这个dump是一位朋友大概一个月前提供给我的,由于wx里面求助的朋友比较多,一时也没找到相关截图,不得已破坏一下老规矩。😭😭😭
既然朋友说api接口无响应,呈现了hangon现象,从一些过往经验看,大概也只有三种情况。
大量锁等待
线程不够用
死锁
有了这种先入为主的思想,那就上windbg说事呗。
二: windbg 分析
1. 有大量锁等待吗?
要想看是否锁等待,老规矩,看一下 同步块表
。
0:000> !syncblkIndex SyncBlock MonitorHeld Recursion Owning Thread Info SyncBlock Owner-----------------------------Total 1673CCW 3RCW 4ComClassFactory 0Free 397
扑了个空,啥也没有,那就暴力看看所有的线程栈吧。
不看还好,一看吓一跳,有339个线程卡在了 System.Threading.Monitor.ObjWait(Boolean, Int32, System.Object)
处,不过转念一想,就算有339个线程卡在这里,真的会导致程序hangon吗? 也不一定,毕竟我看过有1000+的线程也不会卡死,只不过cpu爆高而已,接下来继续研判一下是不是线程不够用导致,可以从 线程池任务队列
上面入手。
2. 探究线程池队列
可以用 !tp
命令查看。
0:000> !tpCPU utilization: 10%Worker Thread: Total: 328 Running: 328 Idle: 0 MaxLimit: 32767 MinLimit: 4Work Request in Queue: 74 Unknown Function: 00007ffe91cc17d0 Context: 000001938b5d8d98 Unknown Function: 00007ffe91cc17d0 Context: 000001938b540238 Unknown Function: 00007ffe91cc17d0 Context: 000001938b5eec08 ... Unknown Function: 00007ffe91cc17d0 Context: 0000019390552948 Unknown Function: 00007ffe91cc17d0 Context: 0000019390562398 Unknown Function: 00007ffe91cc17d0 Context: 0000019390555b30--------------------------------------Number of Timers: 0--------------------------------------Completion Port Thread:Total: 5 Free: 4 MaxFree: 8 CurrentLimit: 4 MaxLimit: 1000 MinLimit: 4
从输出信息看,线程池中328个线程全部打满,工作队列中还有74位客人在等待,综合这两点信息就已经很清楚了,本次hangon是由于大量的客人到来超出了线程池的接待能力所致。
3. 接待能力真的不行吗?
这个标题我觉得很好,真的不行吗? 到底行不行,可以从两点入手:
是不是代码写的烂?
qps是不是真的超出了接待能力?
要想找出答案,还得从那 339 个卡死的线程说起,仔细研究了下每一个线程的调用栈,大概卡死在这三个地方。
<1>. GetModel
public static T GetModel<T, K>(string url, K content){ T result = default(T); HttpClientHandler httpClientHandler = new HttpClientHandler(); httpClientHandler.AutomaticDecompression = DecompressionMethods.GZip; HttpClientHandler handler = httpClientHandler; using (HttpClient httpClient = new HttpClient(handler)) { string content2 = JsonConvert.SerializeObject((object)content); HttpContent httpContent = new StringContent(content2); httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); string mD5ByCrypt = Md5.GetMD5ByCrypt(ConfigurationManager.AppSettings["SsoToken"] + DateTime.Now.ToString("yyyyMMdd")); httpClient.DefaultRequestHeaders.Add("token", mD5ByCrypt); httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage result2 = httpClient.PostAsync(url, httpContent).Result; if (result2.IsSuccessStatusCode) { string result3 = result2.Content.ReadAsStringAsync().Result; return JsonConvert.DeserializeObject<T>(result3); } return result; }}
<2>. Get
public static T Get<T>(string url, string serviceModuleName){ try { T val3 = default(T); HttpClient httpClient = TryGetClient(serviceModuleName, true); using (HttpResponseMessage httpResponseMessage = httpClient.GetAsync(GetRelativeRquestUrl(url, serviceModuleName, true)).Result) { if (httpResponseMessage.IsSuccessStatusCode) { string result = httpResponseMessage.Content.ReadAsStringAsync().Result; if (!string.IsNullOrEmpty(result)) { val3 = JsonConvert.DeserializeObject<T>(result); } } } T val4 = val3; val5 = val4; return val5; } catch (Exception exception) { throw; }}
<3>. GetStreamByApi
public static Stream GetStreamByApi<T>(string url, T content){ Stream result = null; HttpClientHandler httpClientHandler = new HttpClientHandler(); httpClientHandler.AutomaticDecompression ......原文转载:http://www.shaoqun.com/a/901531.html
跨境电商:https://www.ikjzd.com/
hunter:https://www.ikjzd.com/w/992
三维度:https://www.ikjzd.com/w/1312
孙琦:https://www.ikjzd.com/w/1638
一:背景1.讲故事大概有两个月没写博客了,关注我的朋友应该知道我最近都把精力花在了星球,这两个月时间也陆陆续续的有朋友求助如何分析dump,有些朋友太客气了,给了大大的红包,哈哈😅,手里面也攒了10多个不同问题类型的dump,后续也会逐一将分析思路贡献出来。这个dump是一位朋友大概一个月前提供给我的,由于wx里面求助的朋友比较多,一时也没找到相关截图,不得已破坏一下老规矩。😭😭😭既然朋友
zappos:https://www.ikjzd.com/w/330
云栖竹径怎么样,云栖竹径值得去吗,云栖竹径旅游攻略 :http://www.30bags.com/a/436399.html
云丘山交通指南_临汾旅游攻略:http://www.30bags.com/a/427317.html
云丘山自驾游_临汾旅游攻略:http://www.30bags.com/a/427318.html
云试滑|瑞士顶级滑雪区联滑指南:http://www.30bags.com/a/235264.html
女人口述被亲下面的感觉 他的舌头弄得我好舒服:http://lady.shaoqun.com/a/247530.html
妈妈说一周一次 妈妈用身体帮孩子度过青春期:http://lady.shaoqun.com/a/247594.html
三个黑人玩一个少妇4p 被黑人玩得不能下床:http://lady.shaoqun.com/a/248388.html
性描写造就了《金瓶梅》,还是毁了《金瓶梅》?:http://lady.shaoqun.com/a/438490.html
虾皮shopee 开店怎么开,需要那些信息?:https://www.ikjzd.com/articles/146966
当一个男人对你有感觉的时候,他会有这五个动作:http://lady.shaoqun.com/a/438491.html
我妻子背着我和两个欧美男人上床了:http://lady.shaoqun.com/a/438497.html
No comments:
Post a Comment