.Net的性能调优
一、.Net Core中的内存泄露
1.1什么是内存溢出和内存泄露
什么叫内存泄露(memory leak)
是指程序在申请内存后,无法释放已申请的内存空间,导致系统无法及时回收内存并且分配给其他进程使用。通常少次数的内存无法及时回收并不会到程序造成什么影响,但是如果在内存本身就比较少获取多次导致内存无法正常回收时,就会导致内存不够用,最终导致内存溢出。
什么叫内存溢出 (out of memory)
指程序申请内存时,没有足够的内存供申请者使用,导致数据无法正常存储到内存中。也就是说给你个int类型的存储数据大小的空间,但是却存储一个long类型的数据,这样就会导致内存溢出。
2.2内存溢出和内存泄露的关系以及区别
1.关系:内存泄露最终会导致内存溢出,由于系统中的内存是有限的,如果过度占用资源而不及时释放,最后会导致内存不足,从而无法给所需要存储的数据提供足够的内存,从而导致内存溢出。导致内存溢出也可能是由于在给数据分配大小时没有根据实际要求分配,最后导致分配的内存无法满足数据的需求,从而导致内存溢出。
2.区别:内存泄露是由于GC无法及时或者无法识别可以回收的数据进行及时的回收,导致内存的浪费;内存溢出是由于数据所需要的内存无法得到满足,导致数据无法正常存储到内存中。内存泄露的多次表现就是会导致内存溢出。
二、调优工具
安装dotnet-counter和dotnet-dump工具。
dotnet tool install --global dotnet-counters
dotnet tool install --global dotnet-dump
(在线上的时候尽量不用,dump的时候会导致应用程序卡住现象)
三、使用情况
检查托管内存的使用情况
在开始收集诊断数据以帮助分析本案例的根本原因时,需要确保实际看到的是内存泄漏(内存增加)。可以使用 dotnet-counters 工具进行确认。
打开控制台窗口并导航到下载并解压缩示例调试目标的目录。 运行目标:
dotnet run
在单独的控制台中,找到处理 ID:
dotnet-counters ps
输出应如下所示:
现使用 dotnet-counters 工具检查托管内存的使用情况。--refresh-interval 指定两次刷新之间的秒数
dotnet-counters monitor --refresh-interval 1 -p 22728
22728代指前面所找到的该程序的处理 ID
实时输出应如下所示
标签:导致,性能,调优,内存,无法,dotnet,Net,溢出,counters From: https://www.cnblogs.com/MuyingBlog/p/17632386.html