范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

记一次。NET某医保平台CPU爆高分析

  一:背景1. 讲故事
  一直在追这个系列的朋友应该能感受到,我给这个行业中无数的陌生人分析过各种dump,终于在上周有位老同学找到我,还是个大妹子,必须有求必应 。
  妹子公司的系统最近在某次升级之后,在高峰期会遇到 CPU 爆高的现象,有些单位你懂的,很强势,所以就苦逼了程序媛,不管怎么说,既然找上我,得想各种办法给解决掉,用远程的方式告诉了老同学怎么用 procdump 去抓 dump,在一个小时之后 dump 成功拿到,接下来就来分析了。 二:WinDbg 分析1. CPU 真的爆高吗
  是不是爆高一定要拿数据说话,可以用 !tp 命令验证。  0:234> !tp CPU utilization: 44% Worker Thread: Total: 68 Running: 38 Idle: 10 MaxLimit: 4800 MinLimit: 48 Work Request in Queue: 0 -------------------------------------- Number of Timers: 2 -------------------------------------- Completion Port Thread:Total: 1 Free: 1 MaxFree: 96 CurrentLimit: 1 MaxLimit: 4800 MinLimit: 48
  从输出看 CPU=44% 就拿到了 dump ,真的有点奇怪,我设置的阈值是 70% ,可能是老同学后来改了阈值,虽然不是我的预期但还是可以探究一下的。
  接下来怎么排查呢?我们都知道 CPU 高本质都是由 线程 造成的,所以到每个线程栈上去兜兜,看看有没有什么收获,使用命令 ~*e !clrstack 即可。 0:234> ~*e !clrstack OS Thread Id: 0x6de8 (234)         Child SP               IP Call Site 000000959273dfd8 00007ff89d287174 [HelperMethodFrame_2OBJ: 000000959273dfd8] System.Security.Cryptography.Utils._AcquireCSP(System.Security.Cryptography.CspParameters, System.Security.Cryptography.SafeProvHandle ByRef) 000000959273e0d0 00007ff88af3074e System.Security.Cryptography.Utils.AcquireProvHandle(System.Security.Cryptography.CspParameters) 000000959273e110 00007ff88b85e585 System.Security.Cryptography.CryptoAPITransform..ctor(Int32, Int32, Int32[], System.Object[], Byte[], System.Security.Cryptography.PaddingMode, System.Security.Cryptography.CipherMode, Int32, Int32, Boolean, System.Security.Cryptography.CryptoAPITransformMode) 000000959273e230 00007ff88b86057d System.Security.Cryptography.DESCryptoServiceProvider._NewEncryptor(Byte[], System.Security.Cryptography.CipherMode, Byte[], Int32, System.Security.Cryptography.CryptoAPITransformMode) 000000959273e2e0 00007ff88b8602f3 System.Security.Cryptography.DESCryptoServiceProvider.CreateDecryptor(Byte[], Byte[]) 0000009588e7e300 00007ff82f7bd49a xxx.DesDecrypt(System.String) 0000009588e7e370 00007ff82f9848e2 xxx.b__17(xxx_UserInfo) 0000009588e7e3a0 00007ff887d7778e System.Linq.Enumerable+WhereListIterator`1[[System.__Canon, mscorlib]].MoveNext() 0000009588e7e3e0 00007ff887d7767e System.Linq.Enumerable.FirstOrDefault[[System.__Canon, mscorlib]](System.Collections.Generic.IEnumerable`1) ...
  从输出以及截图来看,有 38 个线程正在执行 xxx.DesDecrypt 方法,看起来是一个 DES 解密操作,一般来说 加解密 比较费CPU资源,看样子找到问题根了,根据线程栈找一下代码到底是怎么写的,为了保密起见,这里就多用几个 XXX 来替代吧,参考代码如下:          protected void xxx(string xxx)         {             xxx userInfo = xxxUserInfoList.Where((xxx p) => p.xxx.Name == xxx.DesDecrypt(base.User.Name)).FirstOrDefault();         }
  说实话第一眼看到在 Where 中使用 DesDecrypt(base.User.Name) 方法,虽然有点别扭,内心还是感觉扩展方法应该会帮我优化把它单独给提出来的,比如下面这样。          protected void xxx(string xxx)         {             var nameWhere=  xxx.DesDecrypt(base.User.Name);              xxx userInfo = xxxUserInfoList.Where((xxx p) => p.xxx.Name == nameWhere).FirstOrDefault();         }
  但看了线程栈上的 WhereListIterator 和 FirstOrDefault 方法,貌似没有做优化,为了验证我的想法,我还特意写了段代码。      internal class Program     {         static void Main(string[] args)         {             var query = new List() { "1", "2","3","4" };              var text = "hello world";              query.Where(i => i == Run(text)).FirstOrDefault();         }           public static  string Run(string str)         {             Console.WriteLine(str);              return str;         }     }
  从输出结果看 hello world 输出了 4 次,也就表明当前并没有做任何优化。
  再说点题外话,最近在研究 SQLSERVER,我觉得它的 SQL优化器应该能够处理这种情况,截图如下:  SELECT OrderID FROM dbo.Orders WHERE OrderDate > SUBSTRING("1996-07-10 00:00:10.000", 0, 11) AND        OrderDate < SUBSTRING("1996-07-20 00:00:20.000", 0, 11);
  虽然 SQLSERVER 非常智能的做了优化,但后来想一想C#不优化是对的,因为框架代码没法保证向 xxx.DesDecrypt 方法中传入相同参数,返回的结果一定是相同的,所以采用保守的方法能够理解。 2. 解密操作真的会爆高吗
  就算WHERE中逐项处理解密操作就一定会爆高吗?这是一个需要求证的问题,可以切到某个线程上用 !dso 找出那个 list,然后 !do 即可,参考代码如下:  0:234> !DumpObj /d 000001f631799240 Name:        System.Collections.Generic.List`1[[xxxx_UserInfo,xxxx]] MethodTable: 00007ff82f5f3b20 EEClass:     00007ff88ab59f90 Size:        40(0x28) bytes File:        C:WindowsMicrosoft.NetassemblyGAC_64mscorlibv4.0_4.0.0.0__b77a5c561934e089mscorlib.dll Fields:               MT    Field   Offset                 Type VT     Attr            Value Name 00007ff88b12d6c8  4001843        8     System.__Canon[]  0 instance 000001f6b14ae380 _items 00007ff88b123e98  4001844       18         System.Int32  1 instance             3506 _size 00007ff88b123e98  4001845       1c         System.Int32  1 instance             3506 _version 00007ff88b121c98  4001846       10        System.Object  0 instance 0000000000000000 _syncRoot 00007ff88b12d6c8  4001847        8     System.__Canon[]  0   static  
  从输出可以清晰的看到,当前的 list.count=3506 个,在加上有 38 个线程在并发处理,所以最坏情况下是 3506 * 38 = 13w 的解密操作,难怪说高峰期的时候 CPU 爆高。
  解决办法也很简单,把 xxx.DesDecrypt 给提出来,将解密操作由原来的 13w 优化到 38 次,下午大妹子反馈问题已经解决。
  看到大妹子开心的笑了,我的饭有着落了 三:总结
  这个问题是一个不良习惯的写法造成的,说实话,我不是看到线程栈上的 WhereListIterator 方法我也不相信会执行多次,可能最近中了 SQLSERVER 的毒,不管怎么说,这些都是小事,有大餐吃才是最重要的!

暗指郭艾伦?马布里凌晨发文有伤病就别上场不要找借口郭艾伦在之前对阵哈萨克斯坦队的世预赛中带伤上场,发挥并不尽如人意,在场上根本不敢发力,9投2中仅拿到5分,还出现多达5次失误。马布里做球员时是有名的硬汉,但有些让人惊讶的是,8月2人民币破7。17了,对我国有什么影响?对钢市有什么影响?今天,人民币又再次大幅贬值9月26日上午,央行宣布,为稳定外汇市场预期,加强宏观审慎管理,决定自2022年9月28日起,将远期售汇业务的外汇风险准备金率从0上调至20。消息传出后,值得警惕!我国建筑工程行业五大发展现状,国企进民企退作为我国国民经济中占据重要支柱产业之一的建筑工程行业,在经济和社会发展中都展现出其重要推动作用。改革开放后发展迅猛,发展效益及质量都在不断提高,为中国的新时代发展创造了举世瞩目的成聚焦高质量发展丨逾24亿吨!数说我国陆上最大油田三变端牢能源饭碗新华网哈尔滨9月26日电1959年9月26日,大庆油田被发现。63年来,这个我国陆上最大油田累计生产原油逾24亿吨,占国内陆上同期原油总产量约40,为中国经济巨轮提供了澎湃持久的动我24岁,有听力障碍,想在杭州当骑手养活自己钱江晚报小时新闻记者章然这是一条记者帮成立以来收到的最特殊的求助。它来自听障女孩小于。小于想当一名美团众包骑手,可不知道为什么她在线上认证的过程中出了小问题,老告诉她认证不成功。着千元机又一力作OPPOk10低价旗舰,值得表扬这篇文章,为大家推荐千元价格中值得购买的机型。上文已推荐了Realme真我GTNeo2T,1500以内12256GB大内存手机,CPU跑分70万的性能,采用联发科天玑1200AI处外汇天眼突发大事件,MT4MT5被苹果封杀,已经无法下载据报道,全球最大的零售外汇交易平台MetaQuotesMetaTrader4和MetaTrader5已经从苹果的AppStore下架。而且不是个别地区,而是全球范围的AppStor走路时,膝盖突然软一下?别瞎猜了,有这3种可能平时在走路的过程中要不断活动膝盖,因此上了年纪的人不宜每天走路时间太长,否则会加速膝关节的磨损,退行性变。另外,有的人在走路过程中发现膝盖突然间发软,有类似酸软的表现,这种情况暗示阳气入腰,疾病全消,千古温肾第一方,温脾暖肾养腰赶走一身寒湿大家好,我是刘医生。俗话说得阳者生,失阳者亡意思就是说阳气越足,身体就会越强壮。阳气就是我们身体里面的小太阳,温暖着我们的形体官窍。如果阳气不足就会引起各种各样的病症,今天刘医生给中超第1绝地6次欢呼2次献礼弱旅爆冷先40,泰山决战16场聚焦中超CBA,独一无二球迷媒体点击右上角关注,不会后悔的随着第17轮补赛完成,中超赛程已经过半,比起降级区的逐渐清晰,原本水落石出的争冠格局却突然反转,主要原因还是武汉三镇爆冷3气愤!费德勒退役痛哭流涕,纳达尔也泪如雨下,德约却在一旁偷笑一代网球天王费德勒退役的事件已经传遍世界的每个角落,作为国际体坛顶级巨星,费德勒将网球运动带向了前所未有的新高,当然费德勒之所以如此成功,也离不开生涯两位最大的竞争对手纳达尔与德约
美人性感本无错,邪恶肮脏的欲望才是原罪这个时代女性爱美到了极致,服饰穿搭,美妆美颜也发挥了所有的本能。大长腿,修长的身材,比比皆是。精致的容颜,窈窕的身姿成就了性感美。性感本无错,邪恶肮脏的欲望是原罪。欲壑难填,遇到问从01开启阅读,如何顺应人性重启人生翻阅2022我的书籍哲思2022年是我的人生低谷,我一度自暴自弃或者整日以泪洗面甚至尝试结束生命。2022是痛苦的一年,我不自信,瞧不起自己,我觉得自己怎么这么不争气,想顺利毕业却知道人性到底有多黑暗吗?我才上初三,被人故意传染了艾滋艾滋病是一种危害极其大的传染病,它是由艾滋病毒HIV引起来的,它能够攻克人体免疫系统的一种病毒。当人类感染这种病毒之后,它会破坏人体当中的细胞是人体上升免疫功能,因此人体易于感染各荆州古城迎来新年首批百人旅游大团1月5日,荆州古城景区迎来了兔年首批百人大型旅游团队,来自武汉的近三百名游客齐聚荆州古城,一同领略关公朝圣地,魅力古荆州的历史人文风采。厚重的历史文化,旖旎的自然风光,优秀的服务品周瑜临死前说此人不死,东吴必危!可孙权不听,12年后酿成大祸滚滚长江东逝水,浪花淘尽英雄作为我国历史上最混乱的时期,三国无疑是一个弱肉强食的时代,那段军阀混战战火连天的岁月当中,一位位武将凭借赫赫战功都在历史上留下位自己的名字,至今仍被人津空间宽敞配置丰富,OTA后变得更加智能,苑叔试驾零跑C11传统燃油车时代,一台车的迭代速度取决于硬件的进化,三年一小改,五年一大改是一款燃油车更新的常规节奏。而如今的新能源时代,硬件和软件相当于车辆的左膀右臂,缺一不可,甚至软件的OTA升2023春运开启!今年是广州火车站最后一次普铁春运?2023年春运1月7日正式开启。0时50分,广州站春运首趟临客列车K4562次驶出,开往四川渠县。今年春运是不是广州站的最后一次普铁春运了?不少市民有着这样的疑问。确实,近50年历有人已经丝滑出国游!但出境旅行恢复尚需时日,多国限制中国游客入境新的一年,你的旅游计划做好了吗?动作快的朋友,已经在跨国旅行了!丝滑入境泰国,却发现物价飞涨?可以落地签气候舒适目前也没有核酸检测的要求,泰国成为了近期很多中国游客的出境游首选目的王曼昱连续夺得全运会世乒赛女单冠军,属于她的时代到来了吗?王曼昱夺得全运会,世乒赛女单冠军,是值得祝贺的,也说明她的球技在这段时间,有了大的提升,我国女乒顶尖运动员还有孙颖莎,陈梦。她们的水平差距都在毫厘之间,不相上下,都有问鼎的实力,可从美国买iphonex带回国,可以不拆包装盒直接带回来吗?这样还需要交税吗?我昨天刚从芝加哥回国,看我以前答题的朋友应该都知道我在芝加哥大学读本科,今天刚回国内,刚好一个初中女同学让我帮她带一个美版全新的256G白色,我是去芝加哥的苹果旗舰店买的,价格在1如何彻底删除微信聊天记录,无法再恢复?信息迅速发展的时代,人们也越来越重视自己的数据安全和隐私。很多人都会有删除微信聊天记录的习惯,那么你的微信聊天记录真的删除干净了吗?我们先用iPhone做一个实验我们先将iPhon