为什么Mono的xbuild和mcs有时会在调用时冻结?

时间:2011-09-13 11:36:10

标签: windows multithreading mono freeze

我在Windows 7 x64上使用Mono 2.10.2和2.10.5时遇到过这种情况。

有时,在使用任何参数(或无参数)调用mcsxbuild时,它们只会冻结几分钟。这是在stdout上发生第一次输出之前。在Process Explorer中,我看到基本没有活动的mono.exe运行:常量内存使用,大多数时间没有CPU周期。我看到两个主题:

第一个起始地址为mono-2.0.dll!GC_push_all_stack+0x6650的状态会挂起状态Wait:UserRequest,其中包含以下堆栈跟踪:

ntoskrnl.exe!memset+0x64a
ntoskrnl.exe!KeWaitForMultipleObjects+0xd52
ntoskrnl.exe!KeWaitForMutexObject+0x19f
ntoskrnl.exe!__misaligned_access+0xba4
ntoskrnl.exe!__misaligned_access+0x1821
ntoskrnl.exe!KeWaitForMultipleObjects+0xf5d
ntoskrnl.exe!KeWaitForMutexObject+0x19f
ntoskrnl.exe!NtWaitForSingleObject+0xde
ntoskrnl.exe!KeSynchronizeExecution+0x3a43
wow64cpu.dll!TurboDispatchJumpAddressEnd+0x6c0
wow64cpu.dll!TurboDispatchJumpAddressEnd+0x4a8
wow64.dll!Wow64SystemServiceEx+0x1ce
wow64.dll!Wow64LdrpInitialize+0x429
ntdll.dll!RtlIsDosDeviceName_U+0x24c87
ntdll.dll!LdrInitializeThunk+0xe
ntdll.dll!ZwWaitForSingleObject+0x15
kernel32.dll!WaitForSingleObjectEx+0x43
mono-2.0.dll!mono_sem_timedwait+0x32
mono-2.0.dll!mono_sem_wait+0x21
mono-2.0.dll!mono_gc_cleanup+0x1b0
mono-2.0.dll!mono_thread_set_execution_context+0x14a
mono-2.0.dll!GC_push_all_stack+0x6678
kernel32.dll!BaseThreadInitThunk+0x12
ntdll.dll!RtlInitializeExceptionChain+0x63
ntdll.dll!RtlInitializeExceptionChain+0x36

另一个地址为mono.exe+0x1290的地址Wait:WrLpcReply挂起:

ntoskrnl.exe!memset+0x64a
ntoskrnl.exe!KeWaitForMultipleObjects+0xd52
ntoskrnl.exe!KeWaitForMutexObject+0x19f
ntoskrnl.exe!ExAcquireSharedStarveExclusive+0x30f
ntoskrnl.exe!NtQuerySystemInformation+0x5a7a
ntoskrnl.exe!NtQuerySystemInformation+0x5174
ntoskrnl.exe!NtQuerySystemInformation+0x2f6f
ntoskrnl.exe!KeSynchronizeExecution+0x3a43
ntoskrnl.exe!ZwUnlockFile+0x130
msrpc.sys!Ndr64AsyncClientCall+0x166fb
msrpc.sys!Ndr64AsyncClientCall+0x18638
ntdll.dll!ZwCreateFile+0xa
wow64.dll!Wow64EmulateAtlThunk+0xe697
wow64.dll!Wow64SystemServiceEx+0xd7
wow64cpu.dll!TurboDispatchJumpAddressEnd+0x2d
wow64.dll!Wow64SystemServiceEx+0x1ce
wow64.dll!Wow64LdrpInitialize+0x429
ntdll.dll!RtlUniform+0x6e6
ntdll.dll!RtlCreateTagHeap+0xa7
ntdll.dll!LdrInitializeThunk+0xe
ntdll.dll!NtCreateFile+0x12
kernel32.dll!CreateFileW+0x4a
kernel32.dll!CreateFileA+0x36
mono-2.0.dll!mono_error_raise_exception+0x6f5b
mono-2.0.dll!mono_error_raise_exception+0x472b
mono-2.0.dll!mono_error_raise_exception+0x45fc
mono-2.0.dll!mono_error_raise_exception+0x5fb4
mono-2.0.dll!mono_config_for_assembly+0x16b
mono-2.0.dll!mono_assembly_open_full+0x3d6
mono-2.0.dll!mono_make_shadow_copy+0x7d5
mono-2.0.dll!mono_make_shadow_copy+0x8b9
mono-2.0.dll!mono_make_shadow_copy+0xa29
mono-2.0.dll!mono_install_assembly_postload_refonly_search_hook+0x46
mono-2.0.dll!mono_assembly_load_full_nosearch+0x11b
mono-2.0.dll!mono_make_shadow_copy+0xd5a
mono-2.0.dll!mono_thread_internal_current+0x13
mono-2.0.dll!mono_thread_interruption_requested+0x4e
mono-2.0.dll!mono_runtime_class_init_full+0x14b
mono-2.0.dll!mono_error_raise_exception+0x1bc3
mono-2.0.dll!mono_error_raise_exception+0xe5c
mono-2.0.dll!mono_jit_compile_method+0x10c
mono-2.0.dll!mono_runtime_invoke+0x42
mono-2.0.dll!mono_runtime_class_init_full+0x1df
mono-2.0.dll!mono_codegen+0x303f
mono-2.0.dll!mono_jit_compile_method+0x22
mono-2.0.dll!mono_create_static_rgctx_trampoline+0x637
mono-2.0.dll!mono_magic_trampoline+0x36
mono-2.0.dll!mono_error_raise_exception+0xf28
mono-2.0.dll!mono_runtime_class_init+0x1a
mono-2.0.dll!mono_jit_compile_method+0x10c
mono-2.0.dll!mono_runtime_invoke+0x42
mono-2.0.dll!mono_runtime_exec_main+0x1dc
mono-2.0.dll!mono_main+0x1662
mono.exe+0x1474
mono.exe+0x10bb
mono.exe+0x12a8
kernel32.dll!BaseThreadInitThunk+0x12
ntdll.dll!RtlInitializeExceptionChain+0x63
ntdll.dll!RtlInitializeExceptionChain+0x36

每隔一段时间,他们就会有一点活动,几分钟后,他们会继续完成任务,好像什么也没发生过一样。但是,重复相同的命令将导致相同的冻结量。

一旦我重新启动机器,他们会立即再次作出反应。

0 个答案:

没有答案