V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sagaxu
V2EX  ›  问与答

dotnet 9 比 Java 还费内存?

  •  
  •   sagaxu · 233 天前 · 683 次点击
    这是一个创建于 233 天前的主题,其中的信息可能已经有所发展或是发生改变。

    都说 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 出来再试试。

    第 1 条附言  ·  232 天前
    经过排查与比较,PublishSingleFile 和 PublishTrimmed 发布的没有这个问题,self-contained 也没有问题。

    换了别的系统测试,发现跟系统也有关系,Ubuntu 24 正常,25 异常,无法界定该哪边背锅,持续追踪看哪边先解决。
    目前尚无回复
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2147 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 07:59 · PVG 15:59 · LAX 00:59 · JFK 03:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.