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

旅游网站建设策划书模板瑶海区网站建设

旅游网站建设策划书模板,瑶海区网站建设,代做网页设计作业,可以直接打开网站的方法一#xff1a;背景 1. 讲故事去年十月份有位朋友从微信找到我#xff0c;说他的程序内存要炸掉了。。。截图如下#xff1a;时间有点久#xff0c;图片都被清理了#xff0c;不过有点讽刺的是#xff0c;自己的程序本身就是做监控的#xff0c;结果自己出了问题#xf… 一背景 1. 讲故事去年十月份有位朋友从微信找到我说他的程序内存要炸掉了。。。截图如下时间有点久图片都被清理了不过有点讽刺的是自己的程序本身就是做监控的结果自己出了问题太尴尬了二Windbg 分析 1. 托管还是非托管这个是甄别内存问题的第一步通过 !address -summary 和 !eeheap -gc 两个命令基本就可以断定。0:000 !address -summary                              Mapping file section regions... Mapping module regions... Mapping PEB regions... Mapping TEB and stack regions... Mapping heap regions... Mapping page heap regions... Mapping other regions... Mapping stack trace database regions... Mapping activation context regions...--- Usage Summary ---------------- RgnCount ----------- Total Size -------- %ofBusy %ofTotal Free                                    237     7ffc1e222000 ( 127.985 TB)           99.99% unknown                               594        3b9b20000 (  14.901 GB)  95.96%    0.01% Heap                                    370        012a2a000 ( 298.164 MB)   1.88%    0.00% Image                                  1248        00ee5a000 ( 238.352 MB)   1.50%    0.00% Stack                                   315        006780000 ( 103.500 MB)   0.65%    0.00% Other                                    13        0001d7000 (   1.840 MB)   0.01%    0.00% TEB                                     105        0000d2000 ( 840.000 kB)   0.01%    0.00% PEB                                       1        000001000 (   4.000 kB)   0.00%    0.00%--- Type Summary (for busy) ------ RgnCount ----------- Total Size -------- %ofBusy %ofTotal MEM_PRIVATE                            1178        3ce03d000 (  15.219 GB)  98.00%    0.01% MEM_IMAGE                              1409        00f6fd000 ( 246.988 MB)   1.55%    0.00% MEM_MAPPED                               59        004694000 (  70.578 MB)   0.44%    0.00%--- State Summary ---------------- RgnCount ----------- Total Size -------- %ofBusy %ofTotal MEM_FREE                                237     7ffc1e222000 ( 127.985 TB)           99.99% MEM_COMMIT                             2326        3c7543000 (  15.115 GB)  97.33%    0.01% MEM_RESERVE                             320        01a88b000 ( 424.543 MB)   2.67%    0.00%0:000 !eeheap -gc Number of GC Heaps: 1 generation 0 starts at 0x0000009902B57670 generation 1 starts at 0x0000009902A56810 generation 2 starts at 0x00000095318C1000 ephemeral segment allocation context: (0x0000009902D724A8, 0x0000009902D724C0)segment             begin         allocated         committed    allocated size    committed size ... 00000098FFBE0000  00000098FFBE1000  0000009902D724A8  0000009902D7D000  0x31914a8(51975336)  0x319c000(52019200) Large object heap starts at 0x00000095418C1000segment             begin         allocated         committed    allocated size    committed size 00000095418C0000  00000095418C1000  00000095475D8D98  00000095475D9000  0x5d17d98(97615256)  0x5d18000(97615872) Total Allocated Size:              Size: 0x398e6cbc8 (15450164168) bytes. Total Committed Size:              Size: 0x398e7b000 (15450222592) bytes. ------------------------------ GC Allocated Heap Size:    Size: 0x398e6cbc8 (15450164168) bytes. GC Committed Heap Size:    Size: 0x398e7b000 (15450222592) bytes.从输出信息看好家伙。。。进程提交内存是 15G, 托管堆差不多也是 15G这就说明当前是相对简单的 托管内存泄漏。2. 到底是什么在泄漏要想知道到底是什么在泄漏可以先到托管堆上看看有没有什么异常的对象使用 !dumpheap -stat 命令。0:000 !dumpheap -stat Statistics:MT    Count    TotalSize Class Name ... 00007ff8815d0f88  7260233    290409320 System.Collections.ArrayList 00007ff8815e6830  7313696    326240826 System.String 000000952fbbd2b0 12141398    509369998      Free 00007ff880685cf0  7254983    928637824 System.Diagnostics.ProcessInfo 00007ff88065f7d0  7256845   2031916600 System.Diagnostics.Process 00007ff8815e6ea8  7391338   2230744600 System.Object[] 00007ff88068fa70 186800748   8966435904 System.Diagnostics.ThreadInfo从卦象上来看真的太奇怪了如果大家了解 Process 类应该知道 ProcessInfo 和 ThreadInfo 都是挂在 Process 下的而且 ThreadInfo 对象高达 1.8亿真的太了看样子程序是在不断的做 Process.Start 操作吧。接下来要探究的问题是 ThreadInfo 到底正在被谁持有可以挑几个看看它们的 !gcroot 首尾法查了几个都是没有引用根如下所示0:000 !gcroot 0000009531e8f760 Found 0 unique roots (run !GCRoot -all to see all roots). 0:000 !gcroot 0000009531e8f670  Found 0 unique roots (run !GCRoot -all to see all roots). 0:000 !gcroot 0000009531e8f378 Found 0 unique roots (run !GCRoot -all to see all roots).3. 无引用根为什么不被回收既然对象没有引用根为什么 GC 不回收它呢这里就需要谈经验了在我之前分析的很多关于内存泄漏 的dump中我都是从 生产端 找问题貌似还没有出现一个从 消费端 找问题的案例参考模型如下生产者既然没问题那消费端能有什么问题呢大家可以想一想托管堆的消费端起码有两个角色。GCFinalizer 线程GC 肯定是不会出问题的,那就只能怀疑 Finalizer 线程出了什么问题可以用  !t 命令把所有线程调出来看看。0:000 !t ThreadCount:      9566 UnstartedThread:  0 BackgroundThread: 88 PendingThread:    0 DeadThread:       9471 Hosted Runtime:   noLock  ID OSID ThreadOBJ           State GC Mode     GC Alloc Context                  Domain           Count Apt Exception0    1 40e18 000000952fbdfe50    26020 Preemptive  0000000000000000:0000000000000000 000000952fbd2e40 0     STA 2    2 41ce8 000000952fc0e4d0    2b220 Preemptive  0000000000000000:0000000000000000 000000952fbd2e40 0     MTA (Finalizer) 4    4 41cb4 000000954c324970    27220 Preemptive  0000000000000000:0000000000000000 000000952fbd2e40 0     STA 5    5 41cb8 000000954c36d1e0  2027220 Preemptive  0000000000000000:0000000000000000 000000952fbd2e40 0     STA 6    6 41c58 000000954c33f070  2027220 Preemptive  0000000000000000:0000000000000000 000000952fbd2e40 0     STA 7    7 41c38 000000954c33f840    27220 Preemptive  0000000000000000:0000000000000000 000000952fbd2e40 0     STA 8    8 41e0c 000000954c333580    27220 Preemptive  0000000000000000:0000000000000000 000000952fbd2e40 0     STA 9    9 41e2c 000000954c354440    27220 Preemptive  0000000000000000:0000000000000000 000000952fbd2e40 0     STA 10   10 41f24 000000954c355840    27220 Preemptive  0000000000000000:0000000000000000 000000952fbd2e40 0     STA  ... XXXX 9446    0 000000957a233410  8039820 Preemptive  0000000000000000:0000000000000000 000000952fbd2e40 0     MTA (Threadpool Completion Port)  XXXX 9447    0 0000009579f83e30  8039820 Preemptive  0000000000000000:0000000000000000 000000952fbd2e40 0     MTA (Threadpool Completion Port)  XXXX 9450    0 000000957a46dcf0  8039820 Preemptive  0000000000000000:0000000000000000 000000952fbd2e40 0     MTA (Threadpool Completion Port)  XXXX 9449    0 000000957967c6e0  8039820 Preemptive  0000000000000000:0000000000000000 000000952fbd2e40 0     MTA (Threadpool Completion Port)  XXXX 9448    0 000000957aee0010  8039820 Preemptive  0000000000000000:0000000000000000 000000952fbd2e40 0     MTA (Threadpool Completion Port)  XXXX 9452    0 00000095796824a0  8039820 Preemptive  0000000000000000:0000000000000000 000000952fbd2e40 0     MTA (Threadpool Completion Port)  XXXX 9451    0 000000957af05df0  8039820 Preemptive  0000000000000000:0000000000000000 000000952fbd2e40 0     MTA (Threadpool Completion Port)这不看不知道一看吓一跳当前进程有 9566 个死线程高达 9471 个 以过往经验这小子不用线程池用 new Thread 咯, 吐槽结束再看下 Finalizer 线程正在做什么,使用 ~2s !dumpstack0:002 ~2s ntdll!NtWaitForSingleObject0xa: 00007ff88e220c8a c3              ret 0:002 !dumpstack OS Thread Id: 0x41ce8 (2) Current frame: ntdll!NtWaitForSingleObject0xa Child-SP         RetAddr          Caller, Callee 0000009549e4e120 00007ff88b591118 KERNELBASE!WaitForSingleObjectEx0x94, calling ntdll!NtWaitForSingleObject 0000009549e4e1c0 00007ff88da3e334 combase!MTAThreadWaitForCall0x54 [d:\9147\com\combase\dcomrem\channelb.cxx:5657], calling KERNELBASE!WaitForSingleObject 0000009549e4e210 00007ff88d8fe089 combase!MTAThreadDispatchCrossApartmentCall0x75 [d:\9147\com\combase\dcomrem\chancont.cxx:193], calling combase!MTAThreadWaitForCall [d:\9147\com\combase\dcomrem\channelb.cxx:5619] 0000009549e4e240 00007ff88da3e13d combase!CRpcChannelBuffer::SendReceive20x64b [d:\9147\com\combase\dcomrem\channelb.cxx:4796], calling combase!MTAThreadDispatchCrossApartmentCall [d:\9147\com\combase\dcomrem\chancont.cxx:156] 0000009549e4e2b0 00007ff88e1bb6f7 ntdll!RtlAllocateHeap0xd7, calling ntdll!RtlpLowFragHeapAllocFromContext ... 0000009549e4f5d0 00007ff8827d79cd clr!ManagedThreadBase_DispatchOuter0x75, calling clr!ManagedThreadBase_DispatchMiddle 0000009549e4f5e0 00007ff8828601af clr!EEConfig::GetConfigDWORD_DontUse_0x3b, calling clr!EEConfig::GetConfiguration_DontUse_ 0000009549e4f660 00007ff8828574fa clr!FinalizerThread::FinalizerThreadStart0x10a, calling clr!ManagedThreadBase_DispatchOuter 0000009549e4f6a0 00007ff8827d55b9 clr!EEHeapFreeInProcessHeap0x45, calling kernel32!HeapFreeStub 0000009549e4f700 00007ff882882e8f clr!Thread::intermediateThreadProc0x86 0000009549e4f780 00007ff882882e6f clr!Thread::intermediateThreadProc0x66, calling clr!_chkstk 0000009549e4f7c0 00007ff88dcd13d2 kernel32!BaseThreadInitThunk0x22 0000009549e4f7f0 00007ff88e2003c4 ntdll!RtlUserThreadStart0x34从堆栈信息看原来是终结器线程卡死了从 MTAThreadDispatchCrossApartmentCall 方法看貌似是 MTA 向 STA 做了一个调用到这里有经验的朋友应该知道这和 com 组件有关系了也就是说 Finalizer 线程无法释放由 STA 线程创建的 COM 对象那到底是哪一个线程创建了没有被合理释放的 COM 组件呢4. 寻找创建 COM 组件的线程说实话这个对COM组件不了解的话很难找出答案但天无绝人之路当我回头看 线程列表 的时候发现居然有 38 个 STA线程截图如下这里面肯定有问题接下来抽一个线程看看调用栈如何。0:004 !clrstack  OS Thread Id: 0x41cb4 (4)Child SP               IP Call Site 000000954da1ee38 00007ff88e220c8a [HelperMethodFrame: 000000954da1ee38] System.Threading.Thread.SleepInternal(Int32) 000000954da1ef30 00007ff88138c20a *** WARNING: Unable to verify checksum for mscorlib.ni.dll System.Threading.Thread.Sleep(Int32) 000000954da1ef60 00007ff82322437f xxx.CFileLogTask.DoWork() 000000954da1f160 00007ff8232234d6 xxx.CTask.InitStart() 000000954da1f240 00007ff8813c31d3 System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) 000000954da1f310 00007ff8813c3064 System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) 000000954da1f340 00007ff8813c3032 System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object) 000000954da1f390 00007ff8813bc812 System.Threading.ThreadHelper.ThreadStart() 000000954da1f5e8 00007ff8827d6bb3 [GCFrame: 000000954da1f5e8]  000000954da1f938 00007ff8827d6bb3 [DebuggerU2MCatchHandlerFrame: 000000954da1f938]接下来反编译下 xxx.CFileLogTask.DoWork() 方法看看它是如何被 Thread 执行的。到这里终于水落石出罪魁祸首在 CurrThread.SetApartmentState(ApartmentState.STA); 这一句上我也不知道为啥开个 Thread 还要给个 STA。。。三总结 本次事故主要是因为在 STA 线程上用到了 COM 组件导致让 MTA 模型的 Finalizer 线程去释放时被卡死而这个Thread又没有用 Application.Run 启动消息循环STA也是 Sleep 状态我个人感觉两者无法通讯给到朋友的建议是去掉 Thread 的 STA。其实这里有一个很好的点就是当内存暴涨不一定是 生产端 的问题也有可能是 消费端 。
http://www.pierceye.com/news/317280/

相关文章:

  • 如何比较网站小程序商城开发平台
  • 品牌推广宣传词seo整站优化更能准确获得客户
  • 五八同城找工作招聘信息seo服务如何收费
  • 冒充it男给某网站做修复欧美专业牙科医院网站网页源码
  • 搭建网站需要做什么大型 视频网站开发
  • 济南招考院网站网站建设需要些什么东西
  • 手机怎么搭建网站厦门 做网站
  • 网站底部友情链接典型十大优秀网络营销案例
  • 公司装修工程免费推广软件平台seo博客
  • 树状结构的网站一个人可以做多少网站
  • 什么网站是专门做评论赚钱的响应式网站标准尺寸
  • 梅州市建设培训中心网站济南网上房地产
  • 海口网站提升排名专业做公司logo的网站
  • fm网站开发做网站自动赚钱
  • 网站二级导航制作wordpress找人做
  • 网站建设市场占有率网站开发工程师的职责
  • wordpress 单本小说站做网站前景
  • 只做网站可以在百度里收到吗平面设计是干嘛的
  • 义乌网站建设优化推广网站开发需要哪些人怎么分工
  • 关键词排行优化网站企业seo外包
  • 自适应网站怎么做广西建设局建设行政主管部网站
  • 把网站做成手机版学网页设计的培训
  • 陕西省建设厅执业资格注册中心网站报名系统网站建设重庆最加科技
  • 网站优化软件排名器wordpress E405
  • 北京建设部网站职称集约化网站建设方案
  • 常州溧阳建设工程管理中心网站惠州网站网站建设
  • 你的网站尚未进行备案中国建设银行贵州分行网站
  • 白银做网站的董事wordpress模板搬迁
  • 专业的网站开发建访动地科技登录网站
  • 网站模板素材下载如何做二维码跳转到网站