c# - 100% CPU,卡在 CreateDelegate 和 CerHashtable`2.get_Item

标签 c# asp.net vb.net linq windbg

我有一个 .NET 3.5 网站,偶尔会挂起并达到 100% CPU。通过 WinDbg 运行转储显示我的大约一半线程位于

System.Reflection.CerHashtable`2[[System.__Canon, mscorlib],[System.__Canon, mscorlib]].get_Item(System.__Canon)

另一半坐在

System.Reflection.Emit.DynamicMethod.CreateDelegate(System.Type)

它们都在 LINQ-to-SQL 查询中间。有人知道这里会发生什么吗?数据库似乎保持响应,至少在问题发生时来自 SSMS。

如果有人需要更多信息才能继续,请告诉我。

编辑:

有 22 个线程。 (当我说一半时我是在概括)这是 !threads 的输出

ThreadCount: 23
UnstartedThread: 0
BackgroundThread: 22
PendingThread: 0
DeadThread: 1
Hosted Runtime: no
                                              PreEmptive                                                Lock
       ID OSID        ThreadOBJ     State   GC     GC Alloc Context                  Domain           Count APT Exception
   7    1 19a0 00000000022c7710      8220 Enabled  0000000000000000:0000000000000000 00000000022a2940     0 Ukn
  27    2 1fa0 0000000005591f90      b220 Enabled  00000001a0425058:00000001a04266c0 00000000022a2940     0 MTA (Finalizer)
  29    3 4824 0000000006550450   380b220 Enabled  000000012213cf18:000000012213dec0 00000000067500a0     1 MTA (Threadpool Worker)
  30    4 40c8 00000000061378c0   380b220 Enabled  00000001c1f84c38:00000001c1f860f0 00000000067500a0     1 MTA (Threadpool Worker)
  31    5 2a54 0000000006138770   180b220 Disabled 0000000101e3c858:0000000101e3db00 00000000067500a0     2 MTA (Threadpool Worker)
  32    6 1984 000000000613c940   180b220 Enabled  0000000000000000:0000000000000000 00000000067500a0     0 MTA (Threadpool Worker) System.ObjectDisposedException (000000017fffe458)
  33    7 18d8 000000000613eb80   380b220 Enabled  00000001820c3a30:00000001820c3c90 00000000067500a0     1 MTA (Threadpool Worker)
  34    8 31f4 0000000006141d10   380b220 Enabled  0000000122147048:0000000122147ec0 00000000067500a0     1 MTA (Threadpool Worker)
  35    9 5fe4 00000000061427c0   180b220 Enabled  00000001e1ffbdc8:00000001e1ffc190 00000000067500a0     2 MTA (Threadpool Worker)
  36    a 3768 0000000006143270   180b220 Enabled  00000001e200add0:00000001e200c190 00000000067500a0     1 MTA (Threadpool Worker)
  37    b 1820 000000000670fa10    80a220 Enabled  0000000000000000:0000000000000000 00000000022a2940     0 MTA (Threadpool Completion Port)
  38    c 1220 000000000673e160      1220 Enabled  0000000000000000:0000000000000000 00000000022a2940     0 Ukn
  39    d 507c 0000000008c1f9b0   180b220 Enabled  0000000101e392d0:0000000101e39b00 00000000067500a0     2 MTA (Threadpool Worker)
  14    e 651c 000000000a507000   880a220 Enabled  0000000000000000:0000000000000000 00000000022a2940     0 MTA (Threadpool Completion Port)
  40    f 14a0 000000000ab0a850   380b220 Enabled  00000001a15886c0:00000001a158a638 00000000067500a0     1 MTA (Threadpool Worker)
XXXX   10    0 000000000bd7c7b0      9820 Enabled  0000000000000000:0000000000000000 00000000022a2940     0 MTA
  42   11 48d8 000000000c00c120   380b220 Enabled  0000000000000000:0000000000000000 00000000067500a0     0 MTA (Threadpool Worker)
   3   12 6180 000000000c00c6f0       220 Enabled  0000000000000000:0000000000000000 00000000022a2940     0 Ukn
  43   13 3798 000000000c00d290   180b220 Enabled  00000001420f9730:00000001420f9828 00000000067500a0     2 MTA (Threadpool Worker)
  45   14 1be8 000000001184f150   180b220 Enabled  00000001c1f880e0:00000001c1f880f0 00000000067500a0     2 MTA (Threadpool Worker)
  48   15 13ec 000000001184f720   200b220 Enabled  0000000000000000:0000000000000000 00000000067500a0     1 MTA
  49   17 3bac 00000000198f1b20   180b220 Enabled  0000000182059020:0000000182059c90 00000000067500a0     2 MTA (Threadpool Worker)
  50   16 4670 00000000197b6b00   380b220 Enabled  0000000162040fd0:0000000162042658 00000000067500a0     1 MTA (Threadpool Worker)

这是 !EEStack 的冗长结果(发布在 pastebin 上,因为它不适合这篇文章)

http://pastebin.com/qcF4jX1g

我正在使用 SQL 2005 标准

编辑:

这里的结果是 !syncblk,它将“CerHashtable”显示为所有者,尽管 CerHashtable 上的所有线程似乎都在等待锁?

Index         SyncBlock MonitorHeld Recursion Owning Thread Info          SyncBlock Owner
  148 000000000e4ec1f8           12         0 0000000000000000     none    000000017fe48560 System.Reflection.CerHashtable`2[[System.Reflection.RuntimeMethodInfo, mscorlib],[System.Reflection.RuntimeMethodInfo, mscorlib]]
        Waiting threads:*** WARNING: Unable to verify checksum for NewRelic.Profiler.dll
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for NewRelic.Profiler.dll - 
 29 30 33 34 40 50
-----------------------------
Total           252
CCW             3
RCW             5
ComClassFactory 0
Free            81

最佳答案

Linq-To-Sql was discontinued by Microsoft.

他们推荐使用 Entity Framework。

这不会是一次大修,因为您的 linq 代码我们仍然有效。 您只需要重新创建数据模型。

对于 .Net 3.5,您可以使用 EF v1。

尝试从 http://www.microsoft.com/download/en/details.aspx?id=22 下载 Microsoft .NET Framework 3.5 Service Pack 1
它应该包括第一版 Entity Framework (EFv1),如 http://en.wikipedia.org/wiki/ADO.NET_Entity_Framework 所述.

关于c# - 100% CPU,卡在 CreateDelegate 和 CerHashtable`2.get_Item,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32641445/

相关文章:

asp.net - 如何在 Telerik 的 RadEditor 上设置默认字体?

c# - Microsoft.AspNetCore.SignalR SendAsync 参数

c# - 如何创建 Windows 注册表观察器?

c# - EntityState 必须设置为 null、Created(对于 Create 消息)或 Changed(对于 Update 消息)

c# - 路线模式与单独路线

c# - 限制收集以仅检索只读实体的最近条目

c# - 当主键列不是标识列时,如何插入数据?

c# - 如何刷新 AzMan 访问检查缓存?

c# - 如何删除一条记录?

c# - 防止桌面应用程序上的多个相同用户登录