NaniteStreamingManager 偶现崩溃

机器环境:

内存:128G

显卡:RTX-4080

崩溃堆栈:

2025.08.25-14.30.32:790][ 41]LogThreadingWindows: Error: Runnable thread Background Worker #12 crashed.

[2025.08.25-14.30.32:790][ 41]LogWindows: Error: === Critical error: ===

[2025.08.25-14.30.32:790][ 41]LogWindows: Error:

[2025.08.25-14.30.32:790][ 41]LogWindows: Error: Fatal error!

[2025.08.25-14.30.32:790][ 41]LogWindows: Error:

[2025.08.25-14.30.32:790][ 41]LogWindows: Error: Unhandled Exception: EXCEPTION_ACCESS_VIOLATION reading address 0x000002432b1ea530

[2025.08.25-14.30.32:790][ 41]LogWindows: Error:

[2025.08.25-14.30.32:790][ 41]LogWindows: Error: [Callstack] 0x00007ff6db744445 Game-Win64-Shipping!Nanite::FStreamingManager::AddRequest() [E:\Devops\XXTech\XXEngine560\Engine\Source\Runtime\Engine\Private\Rendering\NaniteStreamingManager.cpp:2879]

[2025.08.25-14.30.32:790][ 41]LogWindows: Error: [Callstack] 0x00007ff6db742abe Game-Win64-Shipping!Nanite::FStreamingManager::AddParentNewRequestsRecursive() [E:\Devops\XXTech\XXEngine560\Engine\Source\Runtime\Engine\Private\Rendering\NaniteStreamingManager.cpp:2991]

[2025.08.25-14.30.32:790][ 41]LogWindows: Error: [Callstack] 0x00007ff6db744f93 Game-Win64-Shipping!Nanite::FStreamingManager::AsyncUpdate() [E:\Devops\XXTech\XXEngine560\Engine\Source\Runtime\Engine\Private\Rendering\NaniteStreamingManager.cpp:3253]

[2025.08.25-14.30.32:790][ 41]LogWindows: Error: [Callstack] 0x00007ff6db74ceb2 Game-Win64-Shipping!TGraphTask<Nanite::FStreamingUpdateTask>::ExecuteTask() [E:\Devops\XXTech\XXEngine560\Engine\Source\Runtime\Core\Public\Async\TaskGraphInterfaces.h:713]

[2025.08.25-14.30.32:790][ 41]LogWindows: Error: [Callstack] 0x00007ff6d8457751 Game-Win64-Shipping!UE::Tasks::Private::FTaskBase::TryExecuteTask() [E:\Devops\XXTech\XXEngine560\Engine\Source\Runtime\Core\Public\Tasks\TaskPrivate.h:530]

[2025.08.25-14.30.32:790][ 41]LogWindows: Error: [Callstack] 0x00007ff6d8447f3f Game-Win64-Shipping!LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask * __cdecl(bool),48>::TTaskDelegateImpl<`LowLevelTasks::FTask::Init<`UE::Tasks::Private::FTaskBase::Init’::`2’::<lambda_1> >‘::`5’::<lambda_1>,0>::CallAndMove() [E:\Devops\XXTech\XXEngine560\Engine\Source\Runtime\Core\Public\Async\Fundamental\TaskDelegate.h:171]

[2025.08.25-14.30.32:790][ 41]LogWindows: Error: [Callstack] 0x00007ff6d844c17e Game-Win64-Shipping!LowLevelTasks::FTask::ExecuteTask() [E:\Devops\XXTech\XXEngine560\Engine\Source\Runtime\Core\Public\Async\Fundamental\Task.h:627]

[2025.08.25-14.30.32:790][ 41]LogWindows: Error: [Callstack] 0x00007ff6d84597cb Game-Win64-Shipping!LowLevelTasks::FScheduler::WorkerLoop() [E:\Devops\XXTech\XXEngine560\Engine\Source\Runtime\Core\Private\Async\Fundamental\Scheduler.cpp:724]

[2025.08.25-14.30.32:790][ 41]LogWindows: Error: [Callstack] 0x00007ff6d844465a Game-Win64-Shipping!`LowLevelTasks::FScheduler::CreateWorker’::`2’::<lambda_1>::operator()() [E:\Devops\XXTech\XXEngine560\Engine\Source\Runtime\Core\Private\Async\Fundamental\Scheduler.cpp:188]

[2025.08.25-14.30.32:790][ 41]LogWindows: Error: [Callstack] 0x00007ff6d84e4584 Game-Win64-Shipping!FThreadImpl::Run() [E:\Devops\XXTech\XXEngine560\Engine\Source\Runtime\Core\Private\HAL\Thread.cpp:68]

[2025.08.25-14.30.32:790][ 41]LogWindows: Error: [Callstack] 0x00007ff6d8661b07 Game-Win64-Shipping!FRunnableThreadWin::Run() [E:\Devops\XXTech\XXEngine560\Engine\Source\Runtime\Core\Private\Windows\WindowsRunnableThread.cpp:159]

[2025.08.25-14.30.32:790][ 41]LogWindows: Error: [Callstack] 0x00007ff6d86618a9 Game-Win64-Shipping!FRunnableThreadWin::GuardedRun() [E:\Devops\XXTech\XXEngine560\Engine\Source\Runtime\Core\Private\Windows\WindowsRunnableThread.cpp:79]

[2025.08.25-14.30.32:790][ 41]LogWindows: Error: [Callstack] 0x00007ffd743ce8d7 KERNEL32.DLL!UnknownFunction

[2025.08.25-14.30.32:790][ 41]LogWindows: Error:

[2025.08.25-14.30.32:790][ 41]LogWindows: Error: Crash in runnable thread Background Worker #12​

<br/>

崩溃描述:

1.低概率复现,多次进场景才出一次

2. 崩溃时没什么特别的行为,就纯跑场景

3. 没改动引擎源码

4.Nanite部分CVar有调整:

r.Nanite.MaxPixelsPerEdge=2

r.Nanite.Streaming.StreamingPoolSize=512

r.Nanite.Tessellation=1

5. 编辑器(WITH_EDITOR)情况下没复现过,都是打包版本出现(Dev, Test, Shipping 均有复现)

<br/>

崩溃部分代码:

void FStreamingManager::AddParentNewRequestsRecursive(const FResources& Resources, uint32 RuntimeResourceID, uint32 PageIndex, uint32 VirtualPageRangeStart, uint32 Priority)

{

checkSlow(Priority < MAX_uint32);

const uint32 NextPriority = Priority + 1u;

<br/>

const FPageStreamingState& PageStreamingState = Resources.PageStreamingStates[PageIndex];

for (uint32 i = 0; i < PageStreamingState.DependenciesNum; i++)

{

const uint32 DependencyPageIndex \= Resources.PageDependencies\[PageStreamingState.DependenciesStart \+ i];

if (!Resources.IsRootPage(DependencyPageIndex))

{

  if (AddRequest(RuntimeResourceID, DependencyPageIndex, VirtualPageRangeStart \+ DependencyPageIndex, NextPriority))

  {

    AddParentNewRequestsRecursive(Resources, RuntimeResourceID, DependencyPageIndex, VirtualPageRangeStart, NextPriority);

  }

}

}

}

<br/>

看dmp 文件,DependencyPageIndex 这个变量都比较大,3161566976,还有几次崩溃都是比较异常的值

<br/>

想问下Epic有没有碰到过类似的崩溃堆栈,以及我们这边该如何进一步定位这个问题。

<br/>

<br/>

<br/>

重现步骤
低概率复现

还有设置了这个

r.Nanite.Streaming.ReservedResources=0;

Hi,

我们好像遇到过类似的问题,你可以试试这个改动,我们暂时不确定什么原因造成一些Page Request的内容出错,不过我们只是跳过这些出问题的request,而不是直接crash。

https://github.com/EpicGames/UnrealEngine/commit/ded19af7a5a3ccaa285c986ce00c6911b3058332

非常感谢回复,我们先把这些出错的page request 跳过。