Внезапно высокий процессор на Windows Server 2012 R2
У нас есть простое веб-приложение ASP.NET (ASP.NET 2.0) на производстве с 2 веб-серверами, и каждый веб-сервер имеет 64 ГБ ОЗУ и 32 ядра. Производственный сайт иногда внезапно повышает производительность процессора до 90-100% на обоих серверах (offcourse only w3wp.exe). Кроме того, мы обнаружили, что pagefile.sys также стал слишком большим (когда-то было 70 ГБ +). Мы взяли несколько дампов процесса w3wp.exe и нашли интересные результаты. Например, мы нашли поток, который занимает 22 минуты, чтобы просто выполнить,
Thread 2840
General Operation Info
Type Unknown Operation
Dumps present All dumps
Elapsed Time (unknown)
Thread Info
Entry point mscorwks!Thread::intermediateThreadProc
System ID 2840 (0xB18)
Create time 21/01/2018 10:55:34
All functions in this operation (excludes boiler-plate functions)
System.Security.CodeAccessSecurityEngine.Assert(System.Security.CodeAccessPermission, System.Threading.StackCrawlMark ByRef)
System.Security.CodeAccessPermission.Assert()
System.Security.PermissionToken.FindToken(System.Type)
System.Security.PermissionSet.RemovePermission(System.Type)
System.Security.PermissionSet.CopyWithNoIdentityPermissions()
System.Security.CodeAccessSecurityEngine.ReflectionTargetDemandHelper(Int32, System.Security.PermissionSet, System.Threading.CompressedStack)
System.Security.CodeAccessSecurityEngine.Assert(System.Security.CodeAccessPermission, System.Threading.StackCrawlMark ByRef)
System.Security.CodeAccessPermission.Assert()
System.Security.PermissionToken.FindToken(System.Type)
System.Security.PermissionSet.RemovePermission(System.Type)
System.Security.PermissionSet.CopyWithNoIdentityPermissions()
System.Security.CodeAccessSecurityEngine.ReflectionTargetDemandHelper(Int32, System.Security.PermissionSet, System.Threading.CompressedStack)
User Time 00:22:42.359
Kernel time 00:01:59.765
Мой вопрос заключается в том, почему CodeAccessSecurityEngine занимает 22 минуты для выполнения?
Мы нашли как минимум 48 потоков в дампах, которые используют CodeAccessSecurityEngine и занимают много времени. Еще несколько примеров,
Thread 8092
General Operation Info
Type Unknown Operation
Dumps present All dumps
Elapsed Time (unknown)
Thread Info
Entry point mscorwks!Thread::intermediateThreadProc
System ID 8092 (0x1F9C)
Create time 21/01/2018 10:25:40
System.String.InternalSubString(Int32, Int32, Boolean)
System.RuntimeType.SplitName(System.String, System.String ByRef, System.String ByRef)
System.RuntimeType.GetInterface(System.String, Boolean)
System.Security.PermissionToken.FindToken(System.Type)
System.Security.PermissionSet.RemovePermission(System.Type)
System.Security.PermissionSet.CopyWithNoIdentityPermissions()
System.Security.CodeAccessSecurityEngine.ReflectionTargetDemandHelper(Int32, System.Security.PermissionSet, System.Threading.CompressedStack)
User Time 00:26:49.734
Kernel time 00:02:38.296
-------------------------------------------------------------------------------
Thread 2360
General Operation Info
Type Unknown Operation
Dumps present All dumps
Elapsed Time (unknown)
Thread Info
Entry point mscorwks!Thread::intermediateThreadProc
System ID 2360 (0x938)
Create time 21/01/2018 10:47:53
System.Collections.Generic.List`1[[System.__Canon, mscorlib]].set_Capacity(Int32)
System.Collections.Generic.List`1[[System.__Canon, mscorlib]].EnsureCapacity(Int32)
System.Collections.Generic.List`1[[System.__Canon, mscorlib]].Add(System.__Canon)
System.RuntimeType.GetMethodCandidates(System.String, System.Reflection.BindingFlags, System.Reflection.CallingConventions, System.Type[], Boolean)
System.RuntimeType.GetMethodImpl(System.String, System.Reflection.BindingFlags, System.Reflection.Binder, System.Reflection.CallingConventions, System.Type[], System.Reflection.ParameterModifier[])
System.Security.PermissionToken.FindToken(System.Type)
System.Security.PermissionSet.RemovePermission(System.Type)
System.Security.PermissionSet.CopyWithNoIdentityPermissions()
System.Security.CodeAccessSecurityEngine.ReflectionTargetDemandHelper(Int32, System.Security.PermissionSet, System.Threading.CompressedStack)
User Time 00:25:37.671
Kernel time 00:02:29.953
-------------------------------------------------------------------------------
Thread 7008
General Operation Info
Type Unknown Operation
Dumps present All dumps
Elapsed Time (unknown)
Thread Info
Entry point mscorwks!Thread::intermediateThreadProc
System ID 7008 (0x1B60)
Create time 21/01/2018 10:54:20
System.Reflection.MethodBase.CheckArguments(System.Object[], System.Reflection.Binder, System.Reflection.BindingFlags, System.Globalization.CultureInfo, System.Signature)
System.Reflection.RuntimeConstructorInfo.Invoke(System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo)
System.RuntimeType.CreateInstanceImpl(System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo, System.Object[])
System.Security.PermissionSet.AddPermission(System.Security.IPermission)
System.Security.CodeAccessSecurityEngine.ReflectionTargetDemandHelper(Int32, System.Security.PermissionSet, System.Threading.CompressedStack)
User Time 00:23:01.656
Kernel time 00:02:04.625
-------------------------------------------------------------------------------
Thread 5584
General Operation Info
Type Unknown Operation
Dumps present All dumps
Elapsed Time (unknown)
Thread Info
Entry point mscorwks!Thread::intermediateThreadProc
System ID 5584 (0x15D0)
Create time 21/01/2018 10:53:13
System.Security.CodeAccessSecurityEngine.ReflectionTargetDemandHelper(Int32, System.Security.PermissionSet, System.Threading.CompressedStack)
User Time 00:23:40.421
Kernel time 00:02:08.296
Дампы были взяты и проанализированы с помощью диагностики отладки, как показано здесь https://docs.microsoft.com/en-us/iis/troubleshoot/performance-issues/troubleshooting-high-cpu-in-an-iis-7x-application-pool устранение неполадок-high-cpu-in-an-iis-7x-application-pool
Является ли CodeAccessSecurityEngine действительно виновником или чем-то еще?