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

网站建设原因分析旅游设计网站

网站建设原因分析,旅游设计网站,在淘宝上开网店的详细步骤,iis网站一#xff1a;背景 C# 程序内存泄漏的诱发因素有很多#xff0c;但从顶层原理上来说#xff0c;就是该销毁的 用户根 对象没有被销毁#xff0c;从而导致内存中意料之外的对象无限堆积#xff0c;导致内存暴涨#xff0c;最终崩溃#xff0c;这其中的一个用户根就是 终结…一背景 C# 程序内存泄漏的诱发因素有很多但从顶层原理上来说就是该销毁的 用户根 对象没有被销毁从而导致内存中意料之外的对象无限堆积导致内存暴涨最终崩溃这其中的一个用户根就是 终结器队列这一篇我们就来看下如何让 PerfView 配合 WinDbg 双剑合璧。二如何洞察 1. 终结器内存泄漏为了模拟 终结器内存泄漏我们故意在 析构函数 中执行复杂的逻辑让析构过程足够的慢,这样可以实现 分配速度 远大于 销毁速度 达到消费能力不足引发的内存暴涨 参考如下代码internal class Program{static void Main(string[] args){Task.Run(Add);Console.ReadLine();}static void Add(){for (int i  0; i  1000000; i){var person  new Person() { Name  $jack{i}, Age  i };}}}public class Person{public string Name { get; set; }public int Age { get; set; }~Person(){Thread.Sleep(new Random().Next(0,3000));Console.WriteLine($name{Name} 已析构了哦 ...);}}当分配操作结束后用 WinDbg 附加到进程中使用 !fq 查看内存情况,输出如下0:015 !fq SyncBlocks to be cleaned up: 0 Free-Threaded Interfaces to be released: 0 MTA Interfaces to be released: 0 STA Interfaces to be released: 0 ---------------------------------- generation 0 has 28423 finalizable objects (000000001BF5B108-000000001BF92940) generation 1 has 4 finalizable objects (000000001BF5B0E8-000000001BF5B108) generation 2 has 21 finalizable objects (000000001BF5B040-000000001BF5B0E8) Ready for finalization 971560 objects (000000001BF92940-000000001C6FC280) Statistics for all finalizable objects (including all objects ready for finalization):MT    Count    TotalSize Class Name 00007ffdbaa2f410        4           96 System.WeakReference 00007ffdbaa4f368        2          112 System.Threading.ThreadPoolWorkQueueThreadLocals 00007ffdbaa4c640        1          168 System.Diagnostics.Tracing.FrameworkEventSource 00007ffdbaa417b8        1          168 System.Diagnostics.Tracing.NativeRuntimeEventSource 00007ffdbaa4a158        1          176 System.Threading.Tasks.TplEventSource 00007ffdbaa05650        3          216 System.Threading.Thread 00007ffdbaa240a8        1          320 System.Diagnostics.Tracing.RuntimeEventSource 00007ffdbaa24ac8        8          896 System.Diagnostics.Tracing.EventSourceOverideEventProvider 00007ffdbaa4fb58   999987     31999584 ConsoleApp2.Person Total 1000008 objects从上面的 Ready for finalization 971560 objects 中可以看到当前有 9.7w 的对象正在排队等待 Finalizer 线程执行既然它可以执行为什么执行这么慢呢这时候就需要调查下 Finalizer Thread 此时正在干嘛。0:001 !t ThreadCount:      7 UnstartedThread:  0 BackgroundThread: 6 PendingThread:    0 DeadThread:       0 Hosted Runtime:   noLock  DBG   ID     OSID ThreadOBJ           State GC Mode     GC Alloc Context                  Domain           Count Apt Exception0    1     4f98 000000000058C270    2a020 Preemptive  0000000000000000:0000000000000000 00000000005814e0 1     MTA 5    2     3f4c 000000001AA94090  202b220 Preemptive  00000000088A9D60:00000000088A9FD0 00000000005814e0 0     MTA (Finalizer) 7    3     24b8 000000001AA986D0  102a220 Preemptive  0000000000000000:0000000000000000 00000000005814e0 0     MTA (Threadpool Worker) 11    4     5520 000000000056F580  1029220 Preemptive  00000000088A5100:00000000088A5FD0 00000000005814e0 0     MTA (Threadpool Worker) 12    5     1004 000000001AB26160  1029220 Preemptive  0000000000000000:0000000000000000 00000000005814e0 0     MTA (Threadpool Worker) 13    6     58a8 000000001B6D35D0    21220 Preemptive  0000000000000000:0000000000000000 00000000005814e0 0     Ukn 14    7      5b8 000000001B650820  1029220 Preemptive  0000000000000000:0000000000000000 00000000005814e0 0     MTA (Threadpool Worker)  0:001 ~~[3f4c]s ntdll!NtDelayExecution0x14: 00007ffe8908c634 c3              ret 0:005 !clrstack  OS Thread Id: 0x3f4c (5)Child SP               IP Call Site 000000001ACEF868 00007ffe8908c634 [HelperMethodFrame: 000000001acef868] System.Threading.Thread.SleepInternal(Int32) 000000001ACEF960 00007ffe19f0c46b System.Threading.Thread.Sleep(Int32) [/_/src/System.Private.CoreLib/src/System/Threading/Thread.CoreCLR.cs  259] 000000001ACEF990 00007ffdba986e15 ConsoleApp2.Person.Finalize() [D:\net6\ConsoleApp1\ConsoleApp2\Program.cs  31] 000000001ACEFCE0 00007ffe1a4a6c06 [DebuggerU2MCatchHandlerFrame: 000000001acefce0]从输出中可以看到终结器线程正在 Sleep() 函数如果你有源码的话可以看下 ConsoleApp2.Person.Finalize() 中的具体业务逻辑如果没有源码的话可以使用 !U 00007ffdba986e15 反汇编下方法源码。0:005 !U 00007ffdba986e15 Normal JIT generated code ConsoleApp2.Person.Finalize() ilAddr is 00000000023920E0 pImport is 0000000002FFF460 Begin 00007FFDBA986DA0, size e9D:\net6\ConsoleApp1\ConsoleApp2\Program.cs  31: 00007ffdba986dd4 48b998b4a6bafd7f0000 mov rcx,7FFDBAA6B498h (MT: System.Random) 00007ffdba986dde e85d0ab25f      call    coreclr!JIT_TrialAllocSFastMP_InlineGetThread (00007ffe1a4a7840) 00007ffdba986de3 488945f8        mov     qword ptr [rbp-8],rax 00007ffdba986de7 488b4df8        mov     rcx,qword ptr [rbp-8] 00007ffdba986deb e848fdffff      call    00007ffdba986b38 (System.Random..ctor(), mdToken: 00000000060015AB) 00007ffdba986df0 488b4df8        mov     rcx,qword ptr [rbp-8] 00007ffdba986df4 33d2            xor     edx,edx 00007ffdba986df6 41b8b80b0000    mov     r8d,0BB8h 00007ffdba986dfc 488b45f8        mov     rax,qword ptr [rbp-8] 00007ffdba986e00 488b00          mov     rax,qword ptr [rax] 00007ffdba986e03 488b4040        mov     rax,qword ptr [rax40h] 00007ffdba986e07 ff5030          call    qword ptr [rax30h] 00007ffdba986e0a 8945f4          mov     dword ptr [rbp-0Ch],eax 00007ffdba986e0d 8b4df4          mov     ecx,dword ptr [rbp-0Ch] 00007ffdba986e10 e833e7feff      call    00007ffdba975548 (System.Threading.Thread.Sleep(Int32), mdToken: 0000000006001CD5)00007ffdba986e15 90              nopD:\net6\ConsoleApp1\ConsoleApp2\Program.cs  32: 00007ffdba986e16 488b0c25f0305d12 mov     rcx,qword ptr [125D30F0h] (name) 00007ffdba986e1e 48894de8        mov     qword ptr [rbp-18h],rcx 00007ffdba986e22 488b4d10        mov     rcx,qword ptr [rbp10h] 00007ffdba986e26 e89dcfffff      call    00007ffdba983dc8 (ConsoleApp2.Person.get_Name(), mdToken: 0000000006000004) 00007ffdba986e2b 488945e0        mov     qword ptr [rbp-20h],rax 00007ffdba986e2f 4c8b0425f8305d12 mov     r8,qword ptr [125D30F8h] () 00007ffdba986e37 488b4de8        mov     rcx,qword ptr [rbp-18h] 00007ffdba986e3b 488b55e0        mov     rdx,qword ptr [rbp-20h] 00007ffdba986e3f e864d7feff      call    00007ffdba9745a8 (System.String.Concat(System.String, System.String, System.String), mdToken: 0000000006000705) 00007ffdba986e44 488945d8        mov     qword ptr [rbp-28h],rax 00007ffdba986e48 488b4dd8        mov     rcx,qword ptr [rbp-28h] 00007ffdba986e4c e8cf99ffff      call    00007ffdba980820 (System.Console.WriteLine(System.String), mdToken: 0000000006000081) 00007ffdba986e51 90              nop 00007ffdba986e52 90              nop 00007ffdba986e53 eb00            jmp     00007ffdba986e55 00007ffdba986e55 488bcc          mov     rcx,rsp 00007ffdba986e58 e808000000      call    00007ffdba986e65 (ConsoleApp2.Person.Finalize(), mdToken: 0000000006000008) 00007ffdba986e5d 90              nopD:\net6\ConsoleApp1\ConsoleApp2\Program.cs  33: 00007ffdba986e5e 90              nop 00007ffdba986e5f 488d6500        lea     rsp,[rbp] 00007ffdba986e63 5d              pop     rbp 00007ffdba986e64 c3              ret最终我们找到了问题原因在真实项目中肯定不会这么简单的往往会执行一个复杂的逻辑接下来我们就有一个好奇点了那个 复杂的逻辑 会大概执行多久呢因为 dump 只是一个静态快照所以从 dump 中寻找的路子就封死了那有没有方案呢肯定有啦让 PerfView 大威天龙。2. Finalize() 到底有多慢在 CoreCLR 中有一些监控 Finalizer Thread 线程的 ETW 事件具体是1FinalizersStart 事件 2FinalizerObject 事件 3FinalizersStop 事件当一个对象准备析构时会触发 FinalizerObject ETW事件所以观察对象之间的析构间隔大概就能看出大致的 耗费时间。知道原理之后接下来打开 PerfView使用默认设置启用 Collect - Collect 收集然后把应用程序跑起来运行一段时间后点击 Stop Collection 在生成的 zip 面板中点击 Event 搜索 Finalize 关键词截图如下从图中可以看到TypeName 列都是 Person 对象而且从 Time MSec 时间戳上可以观察到 Person 和 Person 之间相隔 s 级以上起码说明析构函数 执行真的很慢。
http://www.zqtcl.cn/news/731923/

相关文章:

  • wordpress 不换行沈阳网站制作优化
  • 要维护公司的网站该怎么做怎么联系创意设计网站
  • 阿里云wordpress搭建网站网站如何做app
  • 做微商哪个网站比较好wordpress5.0.2运行慢
  • 中牟高端网站建设建自己的个人网站
  • 网站前台架构WordPress 分类 调用
  • 腾讯用户体验网站哈尔滨百姓网
  • 上海品质网站建设深圳自适应网站制作
  • gta5此网站正在建设更换wordpress后台登陆地址
  • 做花馍网站怎么做自己的简历网站
  • 旅游网站建设网站目的做饲料推广哪个网站好
  • 高网站排名吗网站网站集约化建设
  • 站长之家网站素材WordPress显示访客ip
  • 网上做兼职网站有哪些宁波seo关键词优化服务
  • 玉溪市网站建设推广商城做网站哪家好
  • 企业网站的管理系统人人秀h5制作软件
  • 好的做外贸的网站可口可乐广告策划书范文
  • 湖北分行建设银行网站北京平台网站建设价位
  • 重庆荣昌网站建设wordpress主题 微博
  • 邢台网站建设行情访问外国网站很慢
  • 江东外贸seo网站建设猎奇网站模板
  • 网站做哪些比较赚钱七色板网站建设
  • 专门做甜点的视频网站wordpress 首页 html
  • 建设银行网站维修图片昆明建设网站哪家好
  • 长春市做网站哪家好如何免费做网站网页
  • 时尚工作室网站源码百度seo现状
  • html怎么做查询网站吗前程无忧招聘网下载app官网
  • 找装修公司网站搜索引擎调词平台多少钱
  • 网站建设前台和后台班级网站建设需求
  • 学习教建网站个人做网站用什么技术