.net 同步垃圾收集是否会导致性能经常出现峰值?

.net 同步垃圾收集是否会导致性能经常出现峰值?,.net,c#-4.0,garbage-collection,jmeter,.net,C# 4.0,Garbage Collection,Jmeter,我正在测试一个托管在IIS中的非常简单的.NET Web服务。web服务只是执行简单计算并返回整数的单个方法。我在单独的服务器上配置了JMeter,使用500个线程测试该方法,每个线程循环500次。因此,该方法被调用了250000次,我将吞吐量和响应时间绘制成图表 因此,我的图表包含250000个点,显示吞吐量和响应时间。然而,吞吐量和响应时间图都显示了数据集中高度规则的异常值。在非常固定的时间间隔内,吞吐量会短暂下降,响应时间也会相应增加。在每张图表上的250000个点中,有50到75个这样的

我正在测试一个托管在IIS中的非常简单的.NET Web服务。web服务只是执行简单计算并返回整数的单个方法。我在单独的服务器上配置了JMeter,使用500个线程测试该方法,每个线程循环500次。因此,该方法被调用了250000次,我将吞吐量和响应时间绘制成图表

因此,我的图表包含250000个点,显示吞吐量和响应时间。然而,吞吐量和响应时间图都显示了数据集中高度规则的异常值。在非常固定的时间间隔内,吞吐量会短暂下降,响应时间也会相应增加。在每张图表上的250000个点中,有50到75个这样的异常值

虽然这是一个很小的百分比,对整体性能的影响不是问题,但我想了解异常值的原因。到目前为止,我唯一的理论是asp.net中的同步垃圾收集会导致应用程序定期暂停几秒钟

我想知道垃圾收集器是否会对吞吐量下降/响应时间增加负责


如果不是,则可能存在一些O/S问题,但这里不需要推测性的答案

另一个选项是,如果IIS上的应用程序池占用超过X MB的专用内存,或有超过Y个请求,甚至每Z分钟循环一次,则IIS上的应用程序池配置为循环使用


在这种情况下,您可能看到的是应用程序池的循环。

是的,垃圾收集总是会导致进程中所有线程的执行暂停。此线程的长度可以短也可以长,具体取决于您使用的垃圾收集模式以及升级到后代的已分配内存量

为了量化您在垃圾收集中花费的时间,我建议使用来收集和分析垃圾收集指标


您必须测量GC时间与处理时间的对比,以确定其是否重要。

您需要发布服务配置和一些服务代码,以避免“推测性回答”。更正此问题,谢谢!它是500*500。我手头没有配置,但稍后我会发布。事实上,我欢迎有用的、推测性的答案,但不希望问题被否决:)你会得到垃圾收集器的服务器算法。它会在收集垃圾时挂起所有线程,这在吞吐量测试中很明显。您可以使用.config文件中的
元素来禁用它,以便获得工作站算法支持的并发集合。以总吞吐量为代价。或者等待.NET 4.5我怀疑我的回收设置设置的分钟数很高,因此可能不是原因,尽管建议很好,谢谢。分钟不是唯一的参数。。。检查其他参数以确保:-)