.NET Remoting内存溢出(输入流是无效的二进制格式)故障分析

故障现象
在进行数据导出时经常出现下面的错误:输入流是无效的二进制格式。开始内容(以字节为单位)是: 53-79-73-74-65-6D-2E-4F-75-74-4F-66-4D-65-6D-6F-72...
一旦出现该错误后,其他后面导出的用户都会出现该错误,导致无法进行操作。

故障分析
System.OutOfMemoryException发生
53-79-73-74-65-6D-2E-4F-75-74-4F-66-4D-65-6D-6F-72...
System.OutOfMemor ...
System.OutOfMemoryException发生的两种情况
应用程序消耗了过多的内存
内存碎片过多


内存Dump分析
有446M的free内存, 但最大的free内存块只有26M 不足64M 。内存碎片问题。
-------------------- Type SUMMARY --------------------------

TotSize ( KB) Pct(Tots) Usage

1b450000 (  446784) : 21.30% : <free>

c940000 ( 206080) : 09.83% : MEM_IMAGE

a3c000 ( 10480) : 00.50% : MEM_MAPPED

57824000 ( 1433744) : 68.37% : MEM_PRIVATE

-------------------- State SUMMARY --------------------------

TotSize ( KB) Pct(Tots) Usage

2a82f000 ( 696508) : 33.21% : MEM_COMMIT

1b450000 ( 446784) : 21.30% : MEM_FREE

3a371000 ( 953796) : 45.48% : MEM_RESERVE

Largest free region: Base 58bb0000 - Size 019f0000 (26560 KB)

内存中最大的一个dataset占用了18M内存,查看内容就是出现异常的导功能的内容

sizeof(18e6a408) = 18,437,260 ( 0x119548c) bytes (System.Data.DataSet)



sizeof(18e6a8e0) = 18,437,260 ( 0x119548c) bytes (System.Data.DataTable)

系统中一共加载了6000多种Class,其中有3000多种是<Unloaded Type>

0x0ff286b4 1 32 1 <Unloaded Type>

0x0ff2858c 1 32 1 <Unloaded Type>

0x0ff28464 1 32 1 <Unloaded Type>

0x0ff2833c 1 32 1 <Unloaded Type>

0x0ff28214 1 32 1 <Unloaded Type>

0x0ff280ec 1 32 1 <Unloaded Type>

0x0ff27fc4 1 32 1 <Unloaded Type>

0x0ff27e9c 1 32 1 <Unloaded Type>

0x0ff27d74 1 32 1 <Unloaded Type>

0x0ff27c4c 1 32 1 <Unloaded Type>

IIS日志分析

平均每天点击数:502,708

一共有 5,525 个IP访问过系统 ,平均每天有2,658 个访问

最大点击发生在 2007-11-19 达到 2,481,749次

每天的8,9点是最繁忙的时候

每周的星期四系统最繁忙

有一些remoting的调用返回的数据太大了

从日志中可以看到最大的remoting调用返回了88M的数据

Remoting URI                                   修改前最大发送字节

/rs2/IInventoryQueryService.rem        88171169

/rs2/IEntitySequenceService.rem        33218960
posted @ 2008-02-14 14:09  mp3 swf  阅读(3311)  评论(2编辑  收藏  举报