dotnet 9 比 Java 还费内存?

233 天前
 sagaxu

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

683 次点击
所在节点    问与答
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1110282

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX