【发布时间】:2017-04-02 18:50:49
【问题描述】:
作为应用程序运行缓慢的原因,有人报告说垃圾收集器在收集期间占用了 17% 的 CPU。对我来说,这个统计数据听起来无关紧要,因为 17% 无论如何也不用担心。此外,它是一个任意指标,无法告诉我有关进程内存构成的任何信息。
对我来说更相关的数据是:
我们有多少 Gen 2 系列?
给我看一下内存转储,让我和它一起玩,然后回到你身边。让我看看 heapstat(来自 psscorX 的
!dumpheap -stat)、syncblocks 等。显示严重缓慢期间的 CPU 利用率,以便我知道这不是 I/O 绑定问题,它要求在设计中引入异步。
自我们启动可疑操作以来,我们进行了多少次垃圾回收,其中有多少是完整回收?
显示 LOH 堆碎片。
显示非托管堆、进程中的可用空间以及托管堆占用的总空间。
分析代码并查看需要花费的时间。然后将花费最多时间的操作归零。
但是垃圾收集运行所占用的 CPU 利用率?这对我来说似乎根本不是一个相关的指标。
所以,我要求确认。
是 GC 使用的 CPU 指标,尤其是。当它只有 17% 时,是否是应用程序问题的相关指标?
是否存在预期的 CPU 使用率阈值,GC 通常应在该阈值范围内才能被视为良好且健康的应用程序的正常集合?
我们谈论的是在工作站版本的 CLR 上运行的进程。
【问题讨论】:
标签: c# .net performance garbage-collection clr