我们使用Unity开发了一个VR游戏,探索exe以在win10上运行。 在运行了数小时后,游戏运行hang.cpu 30%(4核) 它看起来像一个无限循环,但是... 1,使用dnSpy进行调试,我们试图从托管的c#堆栈跟踪中查找错误,但是所有线程看起来都是正确的(主线程c#更新方法无法输入,看起来像是挂起) 2.windbg中断服务器时间,
Call Site
ntdll!ZwWaitForSingleObject+0x14
KERNELBASE!WaitForSingleObjectEx+0x9f
UnityPlayer!GfxDeviceWorker::WaitOnCPUFence+0x5c
UnityPlayer!VRDevice::BeforeRendering+0x82
UnityPlayer!`InitPlayerLoopCallbacks'::`2'::PostLateUpdatePlayerSendFrameStartedRegistrator::Forward+0x12
UnityPlayer!PlayerLoop+0x469
UnityPlayer!PerformMainLoop+0xb4
UnityPlayer!MainMessageLoop+0xda
UnityPlayer!UnityMainImpl+0xe38
UnityPlayer!UnityMain+0xb
RedSea!__scrt_common_main_seh+0x11e
KERNEL32!BaseThreadInitThunk+0x14
ntdll!RtlUserThreadStart+0x21
这是主线程idx:0, 通过!runaway ff,我们知道CPU的最高使用线程是:
d3d11!CContext::TID3D11DeviceContext_GetData_<1>+0x26
vrclient_x64!HmdSystemFactory+0xbf8ac
vrclient_x64!HmdSystemFactory+0xaf85
vrclient_x64!HmdSystemFactory+0x27f8
UnityPlayer!OpenVR::SubmitSeparateEyeTextures+0x1df
UnityPlayer!OpenVR::EventGfxThreadCallback+0x89
UnityPlayer!VRDevice::SendVRDeviceEvent+0x35
UnityPlayer!GfxDevice::SendVRDeviceEvent+0x30
UnityPlayer!GfxDeviceWorker::RunCommand+0x8e89
UnityPlayer!GfxDeviceWorker::RunExt+0x3b
UnityPlayer!GfxDeviceWorker::RunGfxDeviceWorker+0x5c
UnityPlayer!Thread::RunThreadWrapper+0x38
KERNEL32!BaseThreadInitThunk+0x14
ntdll!RtlUserThreadStart+0x21
这是一个看起来像要控制hmd设备的线程(idx:11) 目前,我们发现内存使用量从390M减少到20-30M。 我不知道会发生什么,某人有相同的经历?减少内存使用量的原因是什么?对于同一对象(地址0xe6eb5a8f),正在运行WaitForSingleObjectEx超过5个线程(包含main)