100% CPU,卡在CreateDelegate和CerHashtable ' 2.get_Item上
本文关键字:get Item CPU 卡在 CreateDelegate CerHashtable 100% | 更新日期: 2023-09-27 18:13:17
我有一个。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: 23UnstartedThread: 0BackgroundThread: 22PendingThread: 0DeadThread: 1托管运行时:否先发制人的 锁ID OSID ThreadOBJ State GC GC Alloc Context Domain Count APT Exception71 19a0 00000000022c7710 8220启用00000000000000000000000000000000000000000022a2940 0 Ukn27 2 1fa0 0000000005591f90 b220启用00000001a0425058:00000001a04266c0 00000000022a2940 0 MTA (Finalizer)29 3 4824 0000000006550450 380b220启用000000012213cf18:000000012213dec0 00000000067500a0 1 MTA(线程池Worker)30 4 40c8 00000000061378c0 380b220启用00000001c1f84c38:00000001c1f860f0 00000000067500a0 1 MTA(线程池Worker)31 5 2a54 0000000006138770 180b220已禁用0000000101e3c858:0000000101e3db00 00000000067500a0 2 MTA(线程池Worker)32 6 1984 000000000613c940 180b220 Enabled 000000000000000000000000000000000000000000000067500a0 0 MTA (Threadpool Worker)系统。ObjectDisposedException (000000017 fffe458)33 7 18d8 000000000613eb80 380b220 Enabled 00000001820c3a30:00000001820c3c90 00000000067500a0 1 MTA(线程池Worker)34 8 3f4 0000000006141d10 380b220启用0000000122147048:0000000122147ec0 00000000067500a0 1 MTA(线程池Worker)35 9 5fe4 00000000061427c0 180b220启用00000001e1ffbdc8:00000001e1ffc190 00000000067500a0 2 MTA(线程池Worker)36 a 3768 0000000006143270 180b220启用00000001e200add0:00000001e200c190 00000000067500a0 1 MTA(线程池Worker)37 b 1820 000000000670fa10 80a220启用000000000000000000000000000000000000000000000022a2940 0 MTA(线程池完成端口)38 c 1220 000000000673e160 1220启用00000000000000000000000000000000000000000022a2940 0 Ukn39 d 507c 0000000008c1f9b0 180b220启用0000000101e392d0:0000000101e39b00 00000000067500a0 2 MTA(线程池Worker)14 e 651c 000000000a507000 880a220 Enabled 000000000000000000000000000000000000000000000022a2940 0 MTA(线程池完成端口)40 f 14a0 000000000ab0a850 380b220启用00000001a15886c0:00000001a158a638 00000000067500a0 1 MTA(线程池Worker)XXXX 10 0 000000000bd7c7b0 9820启用00000000000000000000000000000000000000000022a2940 0 MTA42 11 48d8 000000000c00c120 380b220启用00000000000000000000000000000000000000000000067500a0 0 MTA(线程池Worker)3 12 6180 000000000c00c6f0 220启用000000000000000000000000000000000000000000000000022a2940 0 Ukn43 13 3798 000000000c00d290 180b220启用00000001420f9730:00000001420f9828 00000000067500a0 2 MTA(线程池Worker)45 14 1be8 000000001184f150 180b220启用00000001c1f880e0:00000001c1f880f0 00000000067500a0 2 MTA(线程池Worker)48 15 13ec 000000001184f720 200b220启用0000000000000000000000000000000000000000000000067500a0 1 MTA49 17 3bac 00000000198f1b20 180b220启用0000000182059020:0000000182059c90 00000000067500a0 2 MTA(线程池Worker)50 16 4670 00000000197b6b00 380b220启用0000000162040fd0:0000000162042658 00000000067500a0 1 MTA(线程池Worker)之前这是EEStack的冗长结果(张贴在pastebin上,因为它不适合这篇文章)
http://pastebin.com/qcF4jX1g我使用SQL 2005标准
编辑:syncblk,它显示了"CerHashtable"作为所有者,虽然CerHashtable上的所有线程似乎都在等待锁?
Index SyncBlock MonitorHeld递归所属线程信息SyncBlock所有者148 000000000e4ec1f8 12 00000000000000000000无000000017fe48560 System.Reflection. cerhashtable ' 2[[System.Reflection. cerhashtable]]RuntimeMethodInfo, mscorlib], [System.Reflection。RuntimeMethodInfo, mscorlib]]等待线程:***警告:无法验证newrelic . profile .dll的校验和***错误:找不到符号文件。默认为newrelic . profile .dll导出符号29 30 33 34 40 50-----------------------------总 252年公约 3RCW 5ComClassFactory 0免费的 81年
Linq-To-Sql已被Microsoft终止。
他们建议使用实体框架
这不会是一个巨大的改革,因为你的linq代码仍然有效。您只需要重新创建您的数据模型。
对于。net 3.5你可以使用EF v1
尝试从http://www.microsoft.com/download/en/details.aspx?id=22下载Microsoft .NET Framework 3.5 Service Pack 1
它应该包括实体框架(EFv1)的第一个版本,如http://en.wikipedia.org/wiki/ADO.NET_Entity_Framework所述。