V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
sagaxu
V2EX  ›  问与答

dotnet 9 比 Java 还费内存?

  •  
  •   sagaxu · Feb 10, 2025 · 835 views
    This topic created in 440 days ago, the information mentioned may be changed or developed.

    都说 dotnet core 可以平替 Java ,尤其是 dotnet 8 之后,优化的很好。

    简单尝试了一下,发现不是那么回事。

    dotnet --version
    9.0.102
    
    dotnet new webapi -o Foo
    (cd Foo && dotnet publish -c Release -o app)
    (cd Foo/app && ./Foo)
    

    RSS 接近 200M

    ps -p`pgrep Foo` -opid,cmd,vsz,rss,pss
        PID CMD                            VSZ   RSS   PSS
       4474 ./Foo                       274224976 194176 169724
    

    用 systemd-run 测试,最低 MemoryMax=160M 可以启动。 这种不带 DB 访问的纯 API ,就算 SpringBoot 也可以 100M 启动,Vertx 可以更低。

    以下环境变量也都试过了,没用

    1. DOTNET_gcServer
    2. DOTNET_GCDynamicAdaptationMode
    3. DOTNET_GCHeapHardLimit

    启动占用多,ab 稍稍给点压力,也不怎么增长,非常诡异。 做了 native aot 之后,内存倒是很低,但目前有很多不兼容 aot 的组件。

    搜了一下,好多案例反馈 dotnet 在 Linux 下内存占用明显比 Windows 大。 我尝试追踪了一下,heap 很小,90%以上都是 unmanaged heap 占的内存。 最常用的 NET Memory Profiler 和 windbg 都是 windows only 。 JVM 相关工具 MAT 和 Arthas 等诊断工具都是跨平台的,dotnet 非 win 生态还是逊色一些。

    虽然 C#很优秀,dotnet core 设计的也很好,但我还是选 Kotlin + JVM ,等 dotnet 10 出来再试试。

    Supplement 1  ·  Feb 11, 2025
    经过排查与比较,PublishSingleFile 和 PublishTrimmed 发布的没有这个问题,self-contained 也没有问题。

    换了别的系统测试,发现跟系统也有关系,Ubuntu 24 正常,25 异常,无法界定该哪边背锅,持续追踪看哪边先解决。
    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   6086 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 02:36 · PVG 10:36 · LAX 19:36 · JFK 22:36
    ♥ Do have faith in what you're doing.