ASP.NET API 在 Ubuntu 上消耗更多内存

ASP.NET API consumes more memory on Ubuntu

提问人:Mohab Alnajjar 提问时间:11/11/2023 更新时间:11/15/2023 访问量:69

问:

我有一个 ASP.NET 核心 API 应用程序,我需要在 Ubuntu 上运行的生产服务器上发布。 发布应用程序并在 MS Windows 上运行它时,它会占用合理的内存量。

enter image description here

当我将应用程序移动到我的生产服务器时,显示与 Windows 相比,它占用了大量内存。htop

enter image description here

那么为什么会这样呢? 另一个问题:为什么有多个操作系统进程运行同一个应用程序?

Linux Ubuntu ASP.NET-WEB-API 内存

评论

0赞 Jalpa Panchal 11/13/2023
两种操作系统都有不同的内存管理处理方式。Linux 倾向于使用更多的内存,因为它会主动缓存许多系统操作,这可能会使它看起来正在使用更多的内存。若要进一步调查,可以尝试:比较两个系统上的运行时和 SDK 版本。检查应用的配置,了解特定于环境的设置。查看垃圾回收日志,了解内存的管理方式。检查进程,查看它们是否确实全部来自你的应用,或者它们是否是不相关的系统进程,但由于其资源使用情况而看起来相关。
0赞 Jalpa Panchal 11/13/2023
关于为什么多个操作系统进程运行同一应用程序,可能是由于: 如果应用程序设计为同时处理请求,则可能会生成多个进程来处理负载。这是 Web 服务器中更有效地利用多核处理器的常见功能。可能存在作为单独进程运行的应用一部分的后台服务或任务。应用使用的某些库或组件可能会为特定任务启动自己的子进程。如果应用程序未完全关闭,则可能会留下未正确清理的孤立进程。

答:

0赞 Mohab Alnajjar 11/15/2023 #1

问题出在我使用的 .NET 版本上:.NET 7.0。 请参阅 linux Github 上的 dotnet 7 中的大量内存使用率回归问题。

对于运行同一应用的操作系统进程:

线程:由内核作为进程实现。也就是说,没有表示线程的专用数据结构。相反,线程是与其他进程共享某些资源(如内存或信号处理程序)的进程。内核通过线程 ID (TID) 和线程组 ID (TGID) 来标识线程,其语义是共享的 TGID 值意味着多线程进程(在用户领域;也有内核线程,但这超出了我们的范围)。[豪森布拉斯,迈克尔。学习现代 Linux。第02章。