为什么 ASP.NET Core 写的网站在启动后一段时间内不断访问内存会线性增长,没有下降趋势?为什么其它语言写的 Web 程序没有这种现象?

2022-04-12 20:10:04 +08:00
 rv54ntjwfm3ug8

自带的 MVC 模板,每按一次 F5 内存占用固定增大 0.8MB 这是什么机制,占到什么程度会开始释放?难道假设我只有 1GB RAM ,只能处理 100 个请求?

2028 次点击
所在节点    程序员
11 条回复
frankyzf
2022-04-12 20:25:45 +08:00
frankyzf
2022-04-12 20:27:59 +08:00
不知道你用的哪个版本,感觉 net 6.0 比以前的版本在内存控制方面好些
roundgis
2022-04-12 20:30:44 +08:00
那 oom 沒有?
userforg2021
2022-04-12 20:43:06 +08:00
1. 其它语言是哪些语言;
2. 100*0.8=80 ;
3. 了解一下 GC 工作机制,以及.net 的 Workstation GC 和 Server GC ;
4. 开 IDE 调试看看有没有触发 GC ,手动触发 GC 试试;
Leviathann
2022-04-12 20:56:30 +08:00
可能没有归还给操作系统
java 应该也是这样,除非是 12 以后的版本 g1gc + 开启 G1PeriodicGCInterval 才会比较明显的归还内存
而 13 以后使用 zgc 的话是默认开启归还的
wanguorui123
2022-04-12 21:28:35 +08:00
可能是 GC 延迟回收吧
hez2010
2022-04-13 00:06:57 +08:00
GC 不会立即 decommit 掉分配的内存的,因为很可能刚刚使用的内存很快又会被使用。
如果代码中没有内存泄漏的 bug 的话,这个数值不会一直往上增长,而是最终会维持在一个稳定的范围内。
seakingii
2022-04-13 00:51:08 +08:00
搞个 ab 压力测试下会不会内存无限增长
INCerry
2022-04-13 12:37:56 +08:00
ragnaroks
2022-04-13 14:15:19 +08:00
不存在你说的问题,3.1 起一个默认模板项目,调试模式初始占用 70M ,多次 F5 后固定在 80M 上下浮动
MonoLogueChi
2022-04-13 16:05:47 +08:00
先要搞明白,其他语言是哪些语言,以及这些语言为什么能做到占用内存比较小。

只要处理请求,就会产生内存占用,要想内存占用始终保持在一个比较低的水平,就要频繁回收内存,但是回收内存会对性能产生影响,内存释放和回收的越频繁,对整体性能影响就越大,就是时间换空间的问题

https://docs.microsoft.com/zh-cn/aspnet/core/performance/memory?view=aspnetcore-6.0

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

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

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

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

© 2021 V2EX