我们有一个安装在多个环境中的asp.net(.net 4.0)webapplication.在大多数环境中,内存使用量大约为1GB.但是,我们有一个内存使用量达到5.5GB的环境.这是在具有4个内核和8GB内存的Server 2008计算机上运行的VMWare esx客户端.
我已经设置了性能计数器,结果如下:
Memory Committed Bytes 10 145 739 948,0000 Pages Output/sec 0,0000 Paging File _Total % Usage 28,998 Process _Total w3wp Working Set 7 480 003 280 5 604 421 056
我还对w3wp进程进行了内存转储(当它为/ -2GB时,因为较大的转储失败).在转储上运行DebugDiag并没有让我更聪明.似乎.net本身只占用800MB而且大部分内存被“别的东西”占用.
.NET GC Heap Information GC Heap Size 826,09 MBytes Total Commit Size 1217 MB Total Reserved Size 16190 MB Heap Analysis Summary Number of heaps 29 Heaps Total reserved memory 1,89 GBytes Total committed memory 1,79 GBytes ... (largest of the Heaps) Reserved memory 1,69 GBytes Committed memory 1,67 GBytes(99,14% of reserved) Uncommitted memory 14,86 MBytes(0,86% of reserved) Number of heap segments 113 segments Number of uncommitted ranges 113 range(s) Size of largest uncommitted range 0 Bytes
问题是我不确定这种高内存使用是一个问题.所以我正在寻找的是如何处理这个问题的一些指导:
>有人告诉我这是IIS7的工作方式,我不应该担心内存.
>或者有人指出我如何进一步分析这个转储(特别是我怎么能看到1,6GB堆中的内容.
>或者向我解释为什么.net正在使用的内容和W3WP正在使用的内容之间存在如此大的差异.
如您所见,所有堆中的总字节数为1.12GB.当时,W3WP使用的是6.4GB.为什么这两个数字之间有这么大的差异?什么可以占用这个空间?这是我看到的LOH的碎片吗?
这实际上更像是一个开发人员问题,与IIS无关.
原文链接:https://www.f2er.com/windows/365957.html你应该做的第一件事是确定内存所在的生成堆(0,1,2或3(大对象堆))
Process Explorer提供了一种显示此信息的简便方法.
在大多数情况下,.NET GC是自我管理的.有一些.config参数可以调整它,但这实际上是开发人员应该提供指导的区域.
如果要检查堆,WinDbg可能是首选工具.
http://blogs.microsoft.co.il/sasha/2010/08/24/psscor2-object-inspection-commands-part-2/
http://blogs.microsoft.co.il/sasha/2010/08/26/psscor2-gc-heap-analysis-commands/