记一次 .NET某数字化协同管理系统 内存暴涨分析 - 一线码农

💡 原文中文,约6800字,阅读约需17分钟。
📝

内容提要

一位朋友在Linux上运行.NET程序时遇到内存泄露,发现大量内存被标记为doublemapper__deleted_。分析后发现,问题与memfd_create系统调用有关,可能是未执行munmap导致资源未释放。关闭EnableWriteXorExecute选项后,程序恢复正常。此特性在.NET7后默认开启,建议在兼容性问题时禁用。

🎯

关键要点

  • 一位朋友在Linux上运行.NET程序时遇到内存泄露,发现大量内存被标记为doublemapper__deleted_。
  • 内存暴涨的原因与memfd_create系统调用有关,可能是未执行munmap导致资源未释放。
  • 使用!maddress命令观察内存分布情况,发现Image占用了大量内存。
  • doublemapper__deleted_与memfd_create函数有关,该函数用于创建匿名文件描述符。
  • 在资源释放中只执行了close(fd),但没有执行munmap,导致内存未释放。
  • EnableWriteXorExecute选项控制内存保护策略,建议在兼容性问题时禁用。
  • 关闭EnableWriteXorExecute选项后,程序恢复正常。
  • EnableWriteXorExecute特性在.NET7后默认开启,可能导致各种兼容性问题。
➡️

继续阅读