Asp.net 诊断";%“垃圾收集时间”;问题
我有一个ASP.NET 2.0应用程序,当在生产级服务器(双四核,4g)上进行负载测试时,它在垃圾收集上花费的时间超过40%。Asp.net 诊断";%“垃圾收集时间”;问题,asp.net,debugging,garbage-collection,Asp.net,Debugging,Garbage Collection,我有一个ASP.NET 2.0应用程序,当在生产级服务器(双四核,4g)上进行负载测试时,它在垃圾收集上花费的时间超过40%。 我一直在尝试隔离这个问题,但它是一个庞大而复杂的代码库,导致运行缓慢。没有GC.Collect()调用。当试图隔离这类问题时,哪些工具、技术等是有用的?首先,我的技巧膝盖出现了问题,当它出现问题时,要么意味着即将下雪,要么有人在字符串连接中使用了大量“+”操作符,而不是像上帝所希望的那样使用StringBuilder 那怎么办?我很早以前就用过了,很喜欢。还有一个可以用
我一直在尝试隔离这个问题,但它是一个庞大而复杂的代码库,导致运行缓慢。没有GC.Collect()调用。当试图隔离这类问题时,哪些工具、技术等是有用的?首先,我的技巧膝盖出现了问题,当它出现问题时,要么意味着即将下雪,要么有人在字符串连接中使用了大量“+”操作符,而不是像上帝所希望的那样使用StringBuilder
那怎么办?我很早以前就用过了,很喜欢。还有一个可以用来捕获自己数据的工具。首先使用分析应用程序(它有一个用于显示收集数据的漂亮GUI,而且是免费的!)。可以找到有关如何评测ASP.Net应用程序的具体说明,这是GC关于内存/性能问题、评测和.Net CLR评测器的一个很好的概述。尝试查看您的团队中是否有人实际重写了
Dispose()
方法以频繁调用GC.Collect()
。这发生在我的团队身上,情况非常糟糕,其中一个Dispose()
方法花了整整一秒钟的时间执行
这是我唯一能想象你的服务器将40%的时间花在垃圾收集上的方法。我发现调试实验室在研究这些问题时非常有用。我发现GC在整个应用程序崩溃前不久就消耗了100%的CPU时间。问题是一次泄漏20mb的“对象泄漏”。最终GC放弃了尝试,内存耗尽
您可以看到它使用perfmon执行此操作的时间有多长,因为有一个GC对象具有相当多的计数器 那个网站太棒了。这个问题实际上让我想到了,但你抢先了我一步