当前位置: 首页 > news >正文

贵阳网站制作工具学编程用什么笔记本电脑好

贵阳网站制作工具,学编程用什么笔记本电脑好,没有网页快照对网站有什么影响,分析网站做的好坏一#xff1a;背景 1. 讲故事这个月初#xff0c;一位朋友加微信求助他的程序出现了 CPU 偶发性爆高#xff0c;希望能有偿解决一下。从描述看#xff0c;这个问题应该困扰了很久#xff0c;还是医院的朋友给力#xff0c;开门就是 100块 红包 #x1f923;#x1f923… 一背景 1. 讲故事这个月初一位朋友加微信求助他的程序出现了 CPU 偶发性爆高希望能有偿解决一下。从描述看这个问题应该困扰了很久还是医院的朋友给力开门就是 100块 红包 那既然是偶发性爆高人工不行还得用 procdump 自动抓用 procdump -ma -s 5 -n 2 -c 70 w3wp 埋伏好几天后如愿生成了两个dump太妙了接下来就用 windbg 分析吧。二Windbg 分析 1. 真的是cpu爆高吗一切只相信数据这里用 !tp 看一下此时 machine 的cpu值。0:062:x86 !tp CPU utilization: 83% Worker Thread: Total: 37 Running: 6 Idle: 31 MaxLimit: 8191 MinLimit: 4 Work Request in Queue: 0 -------------------------------------- Number of Timers: 2 -------------------------------------- Completion Port Thread:Total: 1 Free: 1 MaxFree: 8 CurrentLimit: 1 MaxLimit: 1000 MinLimit: 4从数据看此时 CPU utilization: 83%, 没毛病。2. 查看线程耗时既然是偶发性的bug而且也说了可能是医生操作了什么触发了什么条件才导致的刚好这里也有 2 个dump那就比一下各个线程的耗时吧这里只提取 top5 。0:062:x86 .time Debug session time: Thu Dec 16 14:31:45.000 2021 (UTC  8:00) System Uptime: not available Process Uptime: 0 days 1:20:48.000Kernel time: 0 days 0:08:43.000User time: 0 days 1:08:19.0000:062:x86 !runawayUser Mode TimeThread       Time62:7188     0 days 0:18:05.34344:6c90     0 days 0:16:16.68739:86e8     0 days 0:14:57.73432:1d8c     0 days 0:01:02.54635:23a4     0 days 0:00:58.2500:062:x86 .time Debug session time: Thu Dec 16 14:32:00.000 2021 (UTC  8:00) System Uptime: not available Process Uptime: 0 days 1:21:03.000Kernel time: 0 days 0:08:45.000User time: 0 days 1:08:41.0000:062:x86 !runawayUser Mode TimeThread       Time62:7188     0 days 0:18:11.87544:6c90     0 days 0:16:23.15639:86e8     0 days 0:15:04.15632:1d8c     0 days 0:01:02.54635:23a4     0 days 0:00:58.250从信息看间隔15s的dump相对来说 62,44,39 这三个线程耗时最多所以这三个线程值得继续挖一挖。3. 查看线程栈接下来用 ~62s; !clrstack;~44s; !clrstack;~39s; !clrstack 切到这三个线程看下栈情况如下图所示从栈中看并没有用户代码这就很尴尬了我一度怀疑是不是 webform 的同步上下文导致的但好歹我还是有一些经验既然 !clrstack 看不到那就用 !dumpstack 。0:062:x86 !dumpstack OS Thread Id: 0x7188 (62) TEB information is not available so a stack size of 0xFFFF is assumed Current frame: (MethodDesc 6b0e1b58 0x1c System.Collections.Generic.ObjectEqualityComparer1[[System.__Canon, mscorlib]].Equals(System.__Canon, System.__Canon)) ChildEBP RetAddr  Caller, Callee 3867ebfc 6b440484 (MethodDesc 6b0db558 0x54 System.Collections.Generic.List1[[System.__Canon, mscorlib]].Contains(System.__Canon)) 3867ec18 24bbc3c5 (MethodDesc 25e2ba88 0x845 xxx.bl_baseInfo.getBljl(System.String, System.String)), calling 2f23072e 3867ec84 6b466d0b (MethodDesc 6b0dcb5c 0x7b System.String.TrimHelper(Int32)), calling (MethodDesc 6b0d1cf4 0 System.Globalization.CharUnicodeInfo.IsWhiteSpace(Char)) 3867ec98 24bbba00 (MethodDesc 2a6eca54 0x1b8 xxx_blcx.Button1_Click(System.Object, System.EventArgs)), calling (MethodDesc 25e2ba88 0  xxx.getBljl(System.String, System.String)) 3867ecb8 05b5d487 05b5d487 3867ecec 6092da13 (MethodDesc 5fdff5c0 System.Web.UI.WebControls.Button.OnClick(System.EventArgs)) 3867ed04 5ffdd1cd (MethodDesc 5fdff5e8 0xcd System.Web.UI.WebControls.Button.RaisePostBackEvent(System.String)) 3867ed1c 5ffdd0fd (MethodDesc 5fdff5e0 0xd System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(System.String)) ...真是太奇怪了用户代码 xxx.bl_baseInfo.getBljl 怎么跑到非托管栈 ? 这真是第一次遇到从栈上看程序在 xxx.bl_baseInfo.getBljl() 方法中遇到了问题接下来用 !dso 把堆对象都导出来。0:062:x86 !dso Error requesting heap segment b4fe0000 Failed to retrieve segments for gc heap Unable to determine bounds of gc heap我去这个 dump 的栈被破坏了可能是 cpu 爆高导致的也有可能是抓的不好这下太折磨了得只能用 kb 到非托管栈上找方法参数。0:062:x86 kb# ChildEBP RetAddr      Args to Child               00 3867ebfc 6b440484     cd0a25a8 124e2c7c 0efb330c mscorlib_ni!System.Collections.Generic.ObjectEqualityComparer1[System.__Canon].Equals(System.__Canon, System.__Canon)$##60039130x1c 01 3867ec18 24bbc3c5     cd0a25a8 132b35e4 132b35cc mscorlib_ni!System.Collections.Generic.List1[System.__Canon].Contains(System.__Canon)$##600398F0x54 WARNING: Frame IP not in any known module. Following frames may be wrong. 02 3867ec98 24bbba00     0e3aead8 8412256c 3867ecc0 0x24bbc3c5 03 3867ecb8 05b5d487     0a3d6f00 3867f170 5381fbca 0x24bbba00 04 3867ecec 6092da13     0a3d6e48 00000000 132a20c0 0x5b5d487 05 3867ed04 5ffdd1cd     124ca1a8 80208dfc 80208dfc System_Web_ni![COLD] System.Web.UI.WebControls.Button.OnClick(System.EventArgs)$##60029E30xb ...接下来我们 !do 一下 132b35cc 地址看看是什么 list。0:062:x86 !do 132b35cc Name:        System.Collections.Generic.List1[[xxx.Model.me_zyblbr, xxx]] MethodTable: 29f36c8c EEClass:     6b0aedc4 Size:        24(0x18) bytes File:        C:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll Fields:MT    Field   Offset                 Type VT     Attr    Value Name 6b4aea10  4001871        4     System.__Canon[]  0 instance 8e8054e0 _items 6b513c04  4001872        c         System.Int32  1 instance   233139 _size 6b513c04  4001873       10         System.Int32  1 instance   233139 _version 6b512104  4001874        8        System.Object  0 instance 00000000 _syncRoot 6b4aea10  4001875        4     System.__Canon[]  0   static  no information用输出中可以看到这个 list23w 条记录它正在 list.Contains 处有了这些信息接下来就可以把源码导出来简化后的代码如下public IListxxx getBljl(string as_search, string as_ztbz){IListme_zyblbr list  new Listme_zyblbr();using (CDataBase cDataBase  new CDataBase(xxx)){var text  select xxxx  from xxx;OracleDataReader oracleDataReader  cDataBase.SetReader(text);while (oracleDataReader.Read()){if (!list.Contains(me_zyblbr)){list.Insert(0, me_zyblbr);}}oracleDataReader.Close();return list;}return list;}眼尖的朋友肯定能注意到在数据量大的情况下这里的 list.Insert(0, me_zyblbr); 有大问题毕竟 list.Insert 的复杂度是 O(N)针对 23w 来说总的时间复杂度就是n(n-1)/2 23w(23w-1)/2 26,450,000,000 264亿 。然后就是 3个这样的线程就一起把cpu给抬起来了。4. 到底是什么sql语句导致虽然问题根已找到但朋友最关心的是这位医生到底输入了什么导致 sql 查询了如此大的数据, 不知道医生要扣钱还是他们要向上面有个交代 由于堆栈都 被损坏了找起来还是很麻烦的我用了 sos 中的 !lno, !dumpheap 都是报错,彻底趴窝了最后想了下 sosex 中也有一个 !mdso 命令终于一路坎坷的找到了重要的 OracleParameter 参数。0:062:x86 !mdso Thread 62: Location          Object            Type ------------------------------------------------------------ EDI:      132b35cc  System.Collections.Generic.List1[[xxx.me_zyblbr, xxx]] 3867ec08  124e2c7c  System.Collections.Generic.ObjectEqualityComparer1[[xxx.me_zyblbr, xxx]] 3867ec44  132b3a5c  Oracle.DataAccess.Client.OracleParameter0:062:x86 !mdt 132b3a5c 132b3a5c (Oracle.DataAccess.Client.OracleParameter)__identity:NULL (System.Object)m_pOpoPrmValCtx:4e691200 (System.UIntPtr)m_paramName:125fe6f0 (System.String) Length5, String:xxxm_sourceColumn:NULL (System.String)m_sourceVersion:0x200 (System.Data.DataRowVersion)m_dbType:0x0 (System.Data.DbType)m_oraDbType:0x77 (NVarchar2) (Oracle.DataAccess.Client.OracleDbType)m_bOracleDbTypeExSet:false (System.Boolean)m_maxSize:0xffffffff (System.Int32)m_maxArrayBindSize:NULL (System.Int32[])m_nullable:false (System.Boolean)m_value:132b3af8 (System.String) Length6, String%高血压病%原来是医生模糊查询了一个 高血压病 导致的。。。不过这里主要是想告诉大家的是,当由于内存遭到一定程度的破坏导致 sos 彻底趴窝也不要怕可能还有其他的插件可以救我们于水火之中多一个插件多一条路哈。三总结 总的来说这次偶发的CPU爆高事故犯的相对比较低级对 List.Insert 的复杂度可能也不是很了解也有可能是为了赶业务所欠的债吧改发也相对简单先用 add 送到 list最后再统一按规则做一下重整排序。END工作中的你是否已遇到 ... 1. CPU爆高2. 内存暴涨3. 资源泄漏4. 崩溃死锁5. 程序呆滞等紧急事件全公司都指望着你能解决...  危难时刻才能展现你的技术价值作为专注于.NET高级调试的技术博主欢迎微信搜索: 一线码农聊技术免费协助你分析Dump文件希望我能将你的踩坑经验分享给更多的人。
http://www.pierceye.com/news/367051/

相关文章:

  • 平台网站建设预算表如何来做网站
  • 温州网站制作企业东莞网络推广公司电话
  • 网站建设的条件重庆那些网站
  • 伊犁网站制作大连甘井子区房价
  • 循环视频做网站背景win2012r2 建设网站
  • 建设网站制作汉狮团队义乌北苑编程网站开发公司
  • 网站开发公司会计处理滨州市住房和城乡建设局网站
  • 企业网站站内优化长尾关键词挖掘站长工具
  • 山东平台网站建设企业怎么做自己的品牌网站
  • 长沙seo网站排名杭州网站建设q479185700棒
  • 泰州网站建设搭建工程造价网
  • 网站流程优化c2c模式举例子
  • 帝国网站调用图片集网店平台有哪些
  • 做flash音乐网站的开题报告删除wordpress左上角
  • php网站开发学什么衡水大型网站建设
  • 广州网站开发软件平台wordpress 问号
  • 西安市建设干部学校网站厦门网站优化服务
  • 深圳市南山区住房和建设局官方网站如何把html网站改为asp网站
  • 网站建设有什么技术做dw网站图片怎么下载地址
  • 初中生如何做网站潍坊网站开发
  • 如何修改用织梦做的网站的模板价格对比网站开发
  • 单位建设网站的作用意义家在深圳坂田业主论坛
  • 网站什么时候备案好宜昌网站建设
  • 那个网站可以查询美做空基金竹中建设官方网站
  • 做直播网站找哪个网站网站平台推广方法
  • 查工程中标信息哪个网站成都网站建设 致尚
  • 做硅胶的网站wordpress googleapis
  • 做网站 简单外包常见的管理信息系统有哪些
  • 做网站一万静海网站开发
  • 视频模板在线制作网站空客德国公司