gpt4 book ai didi

.NET 4.0 进程执行暂停了几秒钟,与 Full GC 一致,由交换文件事件引起?

转载 作者:行者123 更新时间:2023-12-01 23:25:07 25 4
gpt4 key购买 nike

我有许多运行相同进程的 Windows 2008 R2 24 核服务器,但进程的每个实例都有不同的数据集。通常每台服务器上运行 2-4 个进程实例。这些进程针对 x64 编译,具有 GUI,并使用工作站 GC。

进程每秒将 GC 计数输出到本地磁盘上的日志文件。日志也用于许多其他事情。偶尔,我发现其中一个进程暂停执行 5 秒或更长时间。我看到在这段时间内没有任何内容写入日志。每次发生这种情况,都与 Gen2 GC 的数量增加 1 一致。

这是一个罕见的事件。这种情况可能在所有进程中每 10000 次 Gen2 GC 发生一次。

每台机器都有足够的 RAM 来将所有进程保存在 RAM 中。

今天早上我在其中一个进程中暂停了 9 秒,这次我捕获了受影响进程和整个机器的性能计数器。当时运行的其他进程均未受到影响。性能计数器的分析显示如下:

暂停前后对比:

  • 进程的虚拟字节数、页面文件字节数、虚拟字节数、工作集和私有(private)工作集下降了大约相同的数量 - 1Gb。为了让您了解流程的大小,专用字节从 3.1 Gb 下降到 2.1 Gb。
  • 进程的句柄数从 8835 减少到 8705
  • 整个机器的可用字节增加了大约 1 Gb
  • 页面错误/秒没有飙升
  • 暂停期间 CPU 使用率稳定

谁能确认此事件可归因于交换?鉴于机器有足够的 RAM,是否有任何修复这些暂停的建议?

更新 #1(2012 年 3 月 5 日):

今天在其中一个流程中遇到了 6.5 秒的暂停。 .NET Clr 内存性能计数器显示 LOH 的大小没有变化,但第 2 代堆的大小和所有堆的大小以及提交的总字节数下降了 700 Mb。保留字节总数减少了 250 Mb。所以看起来在这个特定的 GC 上回收了 Gen2 中的很多垃圾。

更新 #2(2012 年 3 月 6 日):

今天在其中一个流程中遇到了 7 秒的暂停。以下掉落:第 2 代堆大小(.NET CLR 内存)900 MbNum Bytes in all Heaps (.NET CLR Memory) by 900 Mb800 Mb 的总提交字节数(.NET CLR 内存)总保留字节数(.NET CLR 内存)540 Mb虚拟字节(进程)550 Mb800 Mb 的工作集(进程)工作集 - 私有(private)(进程)页面文件字节数(进程)800 Mb800 Mb 的私有(private)字节(进程)

LOH保持不变

最佳答案

看起来您的应用程序的行为使得大对象堆中的许多段在同一个 GC 2 周期内变为“死”(参见 this link in msdn)。当 LOH 中的某个段在 GC 2 后失效时,它会返回给操作系统,当您同时返回很多段时,这可能会很昂贵。

您的应用程序可能超出了 CLR GC 模式的调整范围。如果您的应用程序重复分配大对象(例如大数组),您可能会看到是否可以通过池化和自己重新使用它们而不是依赖 GC 来获得更可预测的 GC 行为。

关于.NET 4.0 进程执行暂停了几秒钟,与 Full GC 一致,由交换文件事件引起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9486637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com