Skip to content

Segmentation fault during app startup on .NET6 #107876

@blushingpenguin

Description

@blushingpenguin

Description

Running an app in a docker container on microk8s 1.30 fails with a segmentation fault. The segmentation fault does not occur if the RAM limit is removed from the container.

Reproduction Steps

I can reproduce this with several of our (similar) applications that are web apis, but I don't have a good isolated reproduction

Expected behavior

Does not crash

Actual behavior

from app...

...some startup messages...
[2024-09-16 13:58:08 DBG] MassTransit.Transports.BusDepot Starting bus instances: IBus
[2024-09-16 13:58:08 DBG] MassTransit Starting bus: rabbitmqs://hoppy.rabbitmq.svc.cluster.local/dev
Segmentation fault (core dumped)

collecting a core dump then creating a backtrace with lldb:

(lldb) bt
* thread #1, name = 'Vendeq.Jobs.Api', stop reason = signal SIGSEGV
  * frame #0: 0x00007be9fb2a6bbb libcoreclr.so`SVR::GCHeap::Alloc(this=<unavailable>, context=0x00007be8500d9168, size=152, flags=2) at gc.cpp:43631:47
    frame #1: 0x00007be9fb174877 libcoreclr.so`AllocateSzArray(MethodTable*, int, GC_ALLOC_FLAGS) at gchelpers.cpp:228:48
    frame #2: 0x00007be9fb17480f libcoreclr.so`AllocateSzArray(pArrayMT=<unavailable>, cElements=16, flags=GC_ALLOC_CONTAINS_REF) at gchelpers.cpp:0
    frame #3: 0x00007be9fafe5e23 libcoreclr.so`ThreadStaticHandleTable::AllocateHandles(unsigned int) at appdomain.cpp:524:35
    frame #4: 0x00007be9fafe5e07 libcoreclr.so`ThreadStaticHandleTable::AllocateHandles(this=0x00007be8140017f0, nRequested=16) at appdomain.cpp:610:19
    frame #5: 0x00007be9fb0ed42d libcoreclr.so`ThreadStatics::AllocateAndInitTLM(ModuleIndex, ThreadLocalBlock*, Module*) [inlined] ThreadLocalBlock::AllocateStaticFieldObjRefPtrs(this=0x00007be8500d9558, nRequested=16, ppLazyAllocate=0x00007be814000f00) at threadstatics.cpp:358:55
    frame #6: 0x00007be9fb0ed3ef libcoreclr.so`ThreadStatics::AllocateAndInitTLM(ModuleIndex, ThreadLocalBlock*, Module*) [inlined] ThreadLocalBlock::AllocateThreadStaticHandles(this=0x00007be8500d9558, pModule=<unavailable>, pThreadLocalModule=0x00007be814000ef0) at threadstatics.cpp:326:9
    frame #7: 0x00007be9fb0ed3e2 libcoreclr.so`ThreadStatics::AllocateAndInitTLM(index=(m_dwIndex = 0), pThreadLocalBlock=0x00007be8500d9558, pModule=<unavailable>) at threadstatics.cpp:651:24
    frame #8: 0x00007be9fb1906f1 libcoreclr.so`JIT_GetGCThreadStaticBase_Helper(pMT=0x00007be981fb0508) at jithelpers.cpp:1760:46
    frame #9: 0x00007be981684d35
    frame #10: 0x00007be9816695e2
    frame #11: 0x00007be9fb2f0657 libcoreclr.so`CallDescrWorkerInternal at unixasmmacrosamd64.inc:850
    frame #12: 0x00007be9fb12614e libcoreclr.so`DispatchCallSimple(unsigned long*, unsigned int, unsigned long, unsigned int) at callhelpers.cpp:67:5
    frame #13: 0x00007be9fb1260f5 libcoreclr.so`DispatchCallSimple(pSrc=<unavailable>, numStackSlotsToCopy=<unavailable>, pTargetAddress=<unavailable>, dwDispatchCallSimpleFlags=<unavailable>) at callhelpers.cpp:220:9
    frame #14: 0x00007be9fb13ecd2 libcoreclr.so`ThreadNative::KickOffThread_Worker(ptr=<unavailable>) at comsynchronizable.cpp:157:5
    frame #15: 0x00007be9fb0eac0a libcoreclr.so`ManagedThreadBase_DispatchOuter(ManagedThreadCallState*) [inlined] ManagedThreadBase_DispatchInner(pCallState=<unavailable>) at threads.cpp:7321:5
    frame #16: 0x00007be9fb0eac08 libcoreclr.so`ManagedThreadBase_DispatchOuter(ManagedThreadCallState*) at threads.cpp:7365:9
    frame #17: 0x00007be9fb0eabc2 libcoreclr.so`ManagedThreadBase_DispatchOuter(ManagedThreadCallState*) [inlined] ManagedThreadBase_DispatchOuter(this=<unavailable>, pParam=<unavailable>)::$_6::operator()(ManagedThreadBase_DispatchOuter(ManagedThreadCallState*)::TryArgs*) const::'lambda'(Param*)::operator()(Param*) const at threads.cpp:7523:13
    frame #18: 0x00007be9fb0eabc2 libcoreclr.so`ManagedThreadBase_DispatchOuter(ManagedThreadCallState*) at threads.cpp:7525:9
    frame #19: 0x00007be9fb0eab53 libcoreclr.so`ManagedThreadBase_DispatchOuter(pCallState=0x00007be9129ffd20) at threads.cpp:7549:5
    frame #20: 0x00007be9fb0eb20d libcoreclr.so`ManagedThreadBase::KickOff(void (*)(void*), void*) [inlined] ManagedThreadBase_FullTransition(pTarget=<unavailable>, args=<unavailable>, filterType=ManagedThread)(void*), void*, UnhandledExceptionLocation) at threads.cpp:7569:5
    frame #21: 0x00007be9fb0eb1f5 libcoreclr.so`ManagedThreadBase::KickOff(pTarget=<unavailable>, args=<unavailable>)(void*), void*) at threads.cpp:7604:5
    frame #22: 0x00007be9fb13eda7 libcoreclr.so`ThreadNative::KickOffThread(pass=0x00007be8500d9110) at comsynchronizable.cpp:228:9
    frame #23: 0x00007be9fb484b0e libcoreclr.so`CorUnix::CPalThread::ThreadEntry(pvParam=0x00007be8500db610) at thread.cpp:1862:16
    frame #24: 0x00007be9fb804ac3 libc.so.6`___lldb_unnamed_symbol3481 + 755
    frame #25: 0x00007be9fb896850 libc.so.6`___lldb_unnamed_symbol3866 + 11

Regression?

No response

Known Workarounds

Removing or increasing the container ram limit seems to avoid the problem

Configuration

Microsoft.AspNetCore.App 6.0.33 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 6.0.33 [/usr/share/dotnet/shared/Microsoft.NETCore.App]

running in a docker container based on ubuntu:22.04 running on microk8s 1.30 on a server running ubuntu24.04 (amd64)

Other information

No response

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    Status

    No status

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions