调试.NET Web应用程序High Memory - Part 2

本文介绍了.NET Web应用程序出现高内存使用问题的调试方法。通过DebugDiag工具分析dump,发现大数据量的DataTable是内存占用的主要原因,存储在Session或Application State中。此外,调试模式下的应用程序和库文件也可能导致额外开销。大量异常的抛出也可能影响性能。通过内存分析,定位到问题并优化,以避免内存泄漏。
摘要由CSDN通过智能技术生成

在第二部分我们主要介绍针对各种内存问题的主要调试方式。在开始之前我还是推荐一个常规的调试步骤。

 

Part1我们提到过debugdiag工具以及如何通过其内建的rule来分析dump

 

  1. 收集dump
  2. 通过DebugDiag选择Managed Memory Analysis规则来做一遍分析
  3. 根据DebugDiag分析报告通过windbg打开dump查看更多信息

 

大数据量datatable

 

首先尝试重现问题,写代码创建一张大表。

using System;
using System.Data;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        CreateLargeDataTables();
        Response.Write("Large Datatable, enjoy!");
    }

    void CreateLargeDataTables()
    {
        DataTable table = new DataTable();
        for (int i = 0; i < 100; i++)
        {
            table.Columns.Add(string.Format("Column{0}", i));
        }
        for (int i = 0; i < 1000; i++)
        {
            DataRow row = table.NewRow();
            for (int j = 0; j < 100; j++)
            {
                row[j] = string.Format("Column{0}Row{1}", i, j);
                for (int k = 0; k < 100; k++)
                {
                    row[j] += "StringConcatCauseHighMemoryAndHighCPU";
                }
            }
            table.Rows.Add(row);
        }

        Application.Add("datatable", table);
    }
}

aspx网页部署到IISIE请求该网页。打开TaskManager观察内存使用情况。

 

内存使用量在持续增长,请求结束之后趋于平稳。

IIS Worker Process内存使用两805.8M

我只发了一个请求。

 

可以肯定IIS WorkerProcess (w3wp.exe)中内存使用有些异常。直接抓一个full user dump (可以直接在TaskManage右键选择CreateDumpFile)

通过Windbg打开Dump分析。

我从DebugDiag的安装目录C:\Program Files\DebugDiag\Exts\拷贝了psscor2windbg的安装目录下,这样我就可以直接执行接下来的命令来加载psscor2这个强悍的托管代码调试扩展。

0:000>.load psscor2

Address命令看一下内存总体使用情况,可以看到<unclassified>占用量最大,调试.NET程序大多数时候<unclassified>对应.NET的托管堆大小。所以我们目标明确了,问题的确出来托管堆里面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值