IIS内存溢出报错解决方案(一)

合集下载

排查内存溢出的方法和步骤

排查内存溢出的方法和步骤

排查内存溢出的方法和步骤

内存溢出是软件开发中常见的问题,它会严重影响程序的性能和稳定性。为了确保软件的优质运行,及时排查和解决内存溢出问题至关重要。本文将详细介绍排查内存溢出的方法和步骤。

一、了解内存溢出

在排查内存溢出之前,我们需要了解什么是内存溢出。内存溢出是指程序在运行过程中,申请的内存超过了系统能够提供的最大内存限制,导致程序无法正常运行。内存溢出主要有以下几种类型:

1.堆内存溢出:指程序在堆内存中申请的空间超过了限制。

2.栈内存溢出:指程序在栈内存中申请的空间超过了限制。

3.全局内存溢出:指程序在全局内存中申请的空间超过了限制。

二、排查内存溢出的方法

1.分析程序代码

(1)检查内存申请和释放的逻辑是否正确。

(2)检查是否存在内存泄露的情况,如已释放的内存还被程序使用。

(3)检查程序中是否存在大量临时对象创建和销毁,导致内存频繁申请和释放。

2.使用内存分析工具

(1)Visual Studio Memory Profiler:适用于Windows平台的内存分析工具,可以监测程序运行过程中的内存使用情况,定位内存溢出问题。

(2)Valgrind:适用于Linux平台的内存分析工具,可以检测内存泄露、

内存越界等问题。

(3)Xcode Memory Graph:适用于iOS和macOS平台的内存分析工具,可以查看内存使用情况,分析内存泄露等问题。

3.动态监测内存使用

在程序运行过程中,实时监测内存使用情况,观察内存是否持续上升。可以通过以下方法进行动态监测:

(1)编写内存监控代码,定期输出程序内存使用情况。

outofmemoryerror的5种原因及解决方案

outofmemoryerror的5种原因及解决方案

outofmemoryerror的5种原因及解决方案[OutOfMemoryError的5种原因及解决方案]

文章长度要求为3000-6000字,属于一篇相对较长的文章,请您谅解在这个自动写作平台上很难一步一步地提供如此详细和完整的答案。然而,我将尽力为您简要介绍OutOfMemoryError的5种常见原因,并为每种原因提供一些解决方案作为参考。

1. 内存泄漏(Memory Leak)

内存泄漏是指在程序运行过程中申请的内存空间没有被正确释放,导致内存不断积累而最终达到内存限制。常见的内存泄漏情景包括未及时关闭打开的文件或数据库连接、未释放的对象引用、不合理的缓存使用等。

解决方案:

- 确保在使用完内存后及时释放资源,如关闭文件或数据库连接。

- 使用弱引用(WeakReference)或软引用(SoftReference)来管理对象,以便垃圾回收器更容易回收不再需要的对象。

- 避免不必要的缓存使用,合理设置缓存的大小和过期时间。

- 使用内存分析工具(如Eclipse Memory Analyzer)检测和修复内存泄漏问题。

2. 不合理的内存分配

内存不足可能是由于分配给应用程序的内存空间不足引起的。这种情况通常发生在需要大量内存的应用程序或者在多个内存密集型应用程序共享同一台机器的情况下。

解决方案:

- 增加Java虚拟机的内存限制,使用-Xmx参数调整堆内存大小。

- 优化算法和数据结构,减少内存使用量。

- 避免多个内存密集型应用程序共享同一台机器,尽量将它们部署在不同的服务器上。

3. 过大的内存对象

解决溢出问题的方法

解决溢出问题的方法

解决溢出问题的方法

解决溢出问题的方法主要有以下几种:

1. 代码审查和优化:通过仔细审查代码,找出可能导致溢出的源头,如大量数据的处理、循环引用等。优化这些代码段,减少内存使用。

2. 调整内存参数:调整JVM的启动参数,如-Xms和-Xmx参数,可以动态调整内存分配。这可以帮助避免内存溢出。

3. 使用内存分析工具:使用内存分析工具(如MAT)来分析内存使用情况,找出并解决内存泄漏问题。

4. 避免大对象分配:尽量避免一次性分配大量内存,可以将大任务拆分成小任务,逐个处理。

5. 优化数据库查询:数据库查询可能导致大量数据加载到内存中,可以通过优化查询语句,减少数据加载量。

6. 升级硬件:在某些情况下,增加物理内存或升级其他硬件(如硬盘)可能有助于解决溢出问题。

7. 使用缓存技术:对于频繁使用的数据,可以使用缓存技术来减少对数据库的访问,从而减少内存使用。

8. 日志分析:仔细分析应用程序日志,查找可能导致溢出的异常或错误。

9. 垃圾回收优化:根据应用程序的特点,选择合适的垃圾回收策略,以减少内存碎片和垃圾回收开销。

10. 避免第三方软件BUG:确保使用的第三方软件没有已知的内存泄漏问题或BUG,并及时更新软件。

这些方法可以根据实际情况进行选择和应用,一般需要通过不断测试和调优来找到最适合的解决方案。

iis运行错误解决方法

iis运行错误解决方法

iis运行错误解决方法

本文讲述了在Windows 7下如何安装IIS7,以及IIS7在安装过程中的一些需要注意的设置,以及在IIS7下配置ASP的正确方法。

在Windows 7下面IIS7的安装方法:

一、进入Windows 7的控制面板,选择左侧的打开或关闭Windows功能。

二、打开后可以看到Windows功能的界面,注意选择的项目,我们按需要选择想要的功能,下面这张图片把需要安装的服务都已经选择了,大家可以按照图片中的说明自行选择开启想要的功能。没有说明的勾选项为必选项或默认安装项。

三、安装完成后,再次进入控制面板,选择管理工具,双击Internet(IIS)管理器选项,进入IIS设置。

四、现在进入到IIS7控制面板。

五、选择 Default Web Site,并双击 ASP 的选项,

六、配置IIS7的站点。

选择计算机名(图中为CIBILL-PC)→网站→Default Web Site,双击 ASP ,对ASP模块进行如下配置:(本步骤非必要操作)

1) 为了保证部分使用了父路径的ASP程序的正常运行,我们将启用父路径选项设置为True。

修改位置:行为→启用父路径→True

说明:如果您的网站没有使用父路径,则本操作可省略。

2) 为了调试方便,我们还需要启用2个调试选项。

修改位置:调试→将错误发送到浏览器→True

调试→启用服务器端调试→True

调试→启用客户端调试→True

说明:仅在开发调试过程中需要启用

3、如果需要绑定域名或者修改网站所用端口,可点击右侧的“绑定...”进行设置。

内存泄露和内存溢出的原因

内存泄露和内存溢出的原因

内存泄露和内存溢出的原因

内存泄露和内存溢出是常见的程序运行问题,导致程序的性能下降或崩溃。其原因可能来自以下几个方面:

1. 代码错误:程序员编写的代码中可能存在逻辑错误或者疏忽导致内存泄露或者溢出。

2. 无限循环:程序中的无限循环会不断占用内存,当内存达到极限时,程序就会崩溃或者出现内存溢出的问题。

3. 大量数据处理:当程序需要处理大量的数据时,如果没有合理地管理内存,就会导致内存溢出。

4. 内存管理不当:内存管理不当也会导致内存泄露或者溢出。比如,如果程序没有及时释放不再使用的内存,就会导致内存泄露;如果程序请求的内存超过了系统所能提供的内存,就会导致内存溢出。

5. 外部因素:除了程序内部的原因,外部因素也可能导致内存泄露或者溢出。比如,系统资源不足、硬件故障、病毒攻击等都会影响程序的内存使用情况。

综上所述,内存泄露和内存溢出的原因可能来自多个方面,程序员在编写程序时需要格外注意,合理管理内存,避免出现这些问题。

- 1 -

IIS应用程序池由服务器引起常见错误号的原因分析及解决方法

IIS应用程序池由服务器引起常见错误号的原因分析及解决方法

IIS应用程序池由服务器引起常见错误号的原因分析及解决方法

错误号:432

错误描述:File name or class name not found during Automation operation

错误来源:PE_Common6

原因分析:服务器没有升级脚本引擎。

解决方法:升级服务器的IE 到6.0 以上版本,如果还不行,单独安装脚本解释引擎。

正在生成网站首页(/Index.htm )……

错误号:-2147319779

错误描述:Automation error Library not registered.

错误来源:PE_Common

原因分析:服务器的IE 版本过低。

解决方法:升级服务器的IE 到6.0 以上版本,如果还不行,单独安装脚本解释引擎。

错误号:-2147319779

错误描述:Automation error Library not registered.

错误来源:PE_CMS6

原因分析:错误定义的应用程序或对象错误,可能是服务器的脚本解释引擎版本过低引起。解决方法:安装脚本解释引擎。

数据采集错误

错误号:7

错误描述:Out of memory

错误来源:PE_Common

原因分析:PE_Common ,Out of memory ,内存溢出,这十分不好说,范围很广。有可能:

1 、采集的文章有日文片假名。

2 、内存不足。也有可能一点,你的采集历史记录非常非常的庞大,因为采集是第一次全部读入内存减小对数据库频繁的检索量,历史记录和采集项目的资料太多了,内存不足

解决方法:这和个人计算机有关,如果条件允许换个服务器看看,故障发生在内存。

IIS内存溢出解决步骤

IIS内存溢出解决步骤

IIS内存溢出解决步骤

IIS(Internet Information Services)是一种用于托管和管理Web

应用程序的Microsoft Web服务器。内存溢出是指在运行过程中,应用程

序使用的内存超过了系统所分配给它的内存,导致应用程序崩溃或运行缓慢。解决IIS内存溢出问题需要一系列步骤,下面是一个详细的步骤指南。

1.确认内存溢出问题:

首先,需要确认是否存在内存溢出问题。可以使用Windows任务管理

器或性能监视器来监视IIS进程的内存使用情况。如果发现内存使用率持

续增加,并且应用程序出现崩溃、运行缓慢或响应时间变长的情况,那么

很可能存在内存溢出问题。

2.分析内存溢出原因:

确定了存在内存溢出问题后,下一步是分析其原因。可以使用性能监

视器、IIS日志、事件查看器等工具来收集相关信息。可能的原因包括内

存泄漏、请求处理超时、缓存配置不当等。

3.优化应用程序:

一些应用程序代码可能存在内存泄漏问题,这意味着在使用完内存后

没有及时释放。可以通过代码审查、性能剖析器等工具来定位并修复这些

问题。同时,还可以考虑优化数据库查询、减少不必要的HTTP请求等措

施来降低内存使用。

4.调整IIS配置:

根据分析结果,可能需要调整IIS的一些配置来解决内存溢出问题。

这些配置包括:

-提高应用程序池的限制:

可以增加应用程序池的内存限制和空闲时间限制,以便更好地适应应用程序的需求。可以通过IIS管理器或命令行工具来进行配置。

-调整缓存设置:

可以减少IIS的缓存大小,或者使用物理磁盘缓存替代内存缓存来减少内存使用。可以在IIS管理器的配置文件中进行相关设置。

32位系统上IIS7内存泄漏的临时解决办法

32位系统上IIS7内存泄漏的临时解决办法

32位系统上IIS7内存泄漏的临时解决办法

可能原因描述:

1、代码书写不太注重内存的使用效率,过度new出大量对象,而不注重即使释放这部分内存的处理,将内存的释放全然交给垃圾处理器。这种情况的解决办法需要仔细分析代码,对结构进行调整后才可以避免。

2、由于32位的Windows系统中的限制,导致IIS中存在无法达到内存自动回收阀值的BUG 造成的,解决办法可以简单得将系统换成64位windows系统,并适当增加物理内存解决。

在无法将系统更换搭到64位平台下,可以通过以下办法来解决。

1、在IIS7的控制面板中打开应用程序池的界面。

2、选中指定的应用程序池,点击右边控制面板上的”高级设置”选项。

3、在弹出的高级设置面板中滚动到“回收”分类处。

4、在虚拟内存限制(KB)一栏中填入当虚拟内存超过某个阀值时变自动启动内存回收

经过以上步骤的设置即可使得当iis服务器在运行web应用程序时,由于程序中的代码通过new向堆内存申请的空间在遇到800M这个阀值时,开始启动内存回收机制并释放无用内存。

Iis系统回收事件日志可以通过windows“事件日志管理器”进行浏览并查看。

个人不建议iis的回收条件使用按时间间隔来回收,因为在4小时的时间内,如果访问的用

户较多则照样造成内存溢出。

IIS内存溢出报错解决方案(一)

IIS内存溢出报错解决方案(一)

项目进行SSB改造以后,当客户端从服务器抓起大笔数据的时候,服务器报一个二进制流的错误,这个错误其实是一个内存溢出的错误。

提纲

故障现象

故障分析与解决

Code Review

工具与方法

故障现象

用户反映在进行数据导出时经常出现下面的错误:输入流是无效的二进制格式。开始内容(以字节为单位)是: 53-79-73-74-65-6D-2E-4F-75-74-4F-66-4D-65-6D-6F-72...

坏┏鱿指么砦蠛?/SPAN>,其他后面导出的用户都会出现该错误,导致无法进行操作。

故障分析

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

IIS内存溢出解决步骤

IIS内存溢出解决步骤

内存溢出是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于虚拟机能提供的最大内存。

引起内存溢出的原因有很多种,常见的有以下几种:

1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据;

2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收;

3.代码中存在死循环或循环产生过多重复的对象实体;

4.使用的第三方软件中的BUG;

5.启动参数内存值设定的过小;

内存溢出的解决方案:

第一步,修改JVM启动参数,直接增加内存。(-Xms,-Xmx参数一定不要忘记加。)

第二步,检查错误日志,查看“OutOfMemory”错误前是否有其它异常或错误。

第三步,对代码进行走查和分析,找出可能发生内存溢出的位置。

重点排查以下几点:

1.检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。

2.检查代码中是否有死循环或递归调用。

3.检查是否有大循环重复产生新对象实体。

4.检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。

5.检查List、MAP等集合对象是否有使用完后,未清除的问题。List、MAP 等集合对象会始终存有对对象的引用,使得这些对象不能被GC回收。

iis应用程序池内存溢出错误System.OutOfMemoryException(转)

iis应用程序池内存溢出错误System.OutOfMemoryException(转)

iis应用程序池内存溢出错误

System.OutOfMemoryException(转)

在博客园看到了一位园友写的文章《如何处理OutOfMemoryException异常?》,于是想和大家交流一下中出现OutOfMemoryException的问题。

实际上,在 Web服务器上,所能够用到的内存,通常不会等同于所有的内存数量。在machine.config配置文件中,配置节<processModel>中有一个属性“memoryLimit”,这个属性的值是一个百分值,默认为“60”,即指定了进程(在任务管理器中大家就可以看到的进程,IIS5中为aspnet_wp,IIS6中为w3wp)能够使用所有物理内存的60%。当使用的内存量超过这个限额时,IIS会开始自动回收(recycle)进程,即创建一个新的进程去负责应付Http请求,而将旧进程所占用的内存回收。

当我们有一台很大内存的服务器时,“memoryLimit”这个值是需要进行适当的调整的。比如我们准备了一台chemas-microsoft-com ffice marttags" />t="on">4G内存的服务器,那么t="on">4G?60%=t="on">2.4G。但是,对于Win32操作系统,一个进程所能占用的所有内存空间只有t="on">2G。当进程占用的内存开始达到t="on">2G时,由于它并没有达到t="on">2.4G 的“回收阈值”,所以IIS不会启动recycle进程操作,但是由于Win32的限制,实际上已经不能给这个进程分配更多的内存了,于是,OutOfMemoryException就很可能会被抛出了。为了避免这样的情况,我们就必须将“memoryLimit”适当调小,以让IIS更早的进行进程回收。

如何解决内存溢出问题

如何解决内存溢出问题

如何解决内存溢出问题?

2004-12-2 17:07:28

在程序员设计的代码中包含的“内存溢出”漏洞实在太多了。本文将给大家介绍内存溢出问题的产生根源、巨大危害和解决途径。

一、为什么会出现内存溢出问题?

导致内存溢出问题的原因有很多,比如:

(1) 使用非类型安全(non-type-safe)的语言如 C/C++ 等。

(2) 以不可靠的方式存取或者复制内存缓冲区。

(3) 编译器设置的内存缓冲区太靠近关键数据结构。

下面来分析这些因素:

1. 内存溢出问题是 C 语言或者 C++ 语言所固有的缺陷,它们既不检查数组边界,又不检查类型可靠性(type-safety)。众所周知,用 C/C++ 语言开发的程序由于目标代码非常接近机器内核,因而能够直接访问内存和寄存器,这种特性大大提升了 C/C++ 语言代码的性能。只要合理编码,C/C++ 应用程序在执行效率上必然优于其它高级语言。然而,C/C++ 语言导致内存溢出问题的可能性也要大许多。其他语言也存在内容溢出问题,但它往往不是程序员的失误,而是应用程序的运行时环境出错所致。

2. 当应用程序读取用户(也可能是恶意攻击者)数据,试图复制到应用程序开辟的内存缓冲区中,却无法保证缓冲区的空间足够时(换言之,假设代码申请了 N 字节大小的内存缓冲区,随后又向其中复制超过 N 字节的数据)。内存缓冲区就可能会溢出。想一想,如果你向 12 盎司的玻璃杯中倒入 16 盎司水,那么多出来的 4 盎司水怎么办?当然会满到玻璃杯外面了!

3. 最重要的是,C/C++ 编译器开辟的内存缓冲区常常邻近重要的数据结构。现在假设某个函数的堆栈紧接在在内存缓冲区后面时,其中保存的函数返回地址就会与内存缓冲区相邻。此时,恶意攻击者就可以向内存缓冲区复制大量数据,从而使得内存缓冲区溢出并覆盖原先保存于堆栈中的函数返回地址。这样,函数的返回地址就被攻击者换成了他指定的数值;一旦函数调用完毕,就会继续执行“函数返回地址”处的代码。非但如此,C++ 的某些其它数据结构,比如 v-table 、例外事件处理程序、函数指针等,也可能受到类似的攻击。好,闲话少说,现在来看一个具体的例子。

IIS应用程序池由服务器引起常见错误号的原因分析及解决方法

IIS应用程序池由服务器引起常见错误号的原因分析及解决方法

IIS应用程序池由服务器引起常见错误号的原因分析及解决方法

错误号:432

错误描述:File name or class name not found during Automation operation

错误来源:PE_Common6

原因分析:服务器没有升级脚本引擎。

解决方法:升级服务器的IE 到6.0 以上版本,如果还不行,单独安装脚本解释引擎。

正在生成网站首页(/Index.htm )……

错误号:-79

错误描述:Automation error Library not registered.

错误来源:PE_Common

原因分析:服务器的IE 版本过低。

解决方法:升级服务器的IE 到6.0 以上版本,如果还不行,单独安装脚本解释引擎。

错误号:-79

错误描述:Automation error Library not registered.

错误来源:PE_CMS6

原因分析:错误定义的应用程序或对象错误,可能是服务器的脚本解释引擎版本过低引起。解决方法:安装脚本解释引擎。

数据采集错误

错误号:7

错误描述:Out of memory

错误来源:PE_Common

原因分析:PE_Common ,Out of memory ,内存溢出,这十分不好说,范围很广。有可能:

1 、采集的文章有日文片假名。

2 、内存不足。也有可能一点,你的采集历史记录非常非常的庞大,因为采集是第一次全部读入内存减小对数据库频繁的检索量,历史记录和采集项目的资料太多了,内存不足

解决方法:这和个人计算机有关,如果条件允许换个服务器看看,故障发生在内存。

内存泄漏的解决方法

内存泄漏的解决方法

内存泄漏的解决方法

内存泄漏是指程序在运行时未能正确释放不再使用的内存,导致内存

的一部分或全部长时间占用。如果内存泄漏的问题不及时解决,会导

致程序运行速度变慢、卡顿或者崩溃。以下是一些解决内存泄漏的方法。

1. 使用自动垃圾回收机制

许多编程语言都有自动垃圾回收机制,它能够自动管理内存回收。在Java和JavaScript等语言中,有一个垃圾回收器能够跟踪对象和变量引用的情况,并释放它们所占用的内存。使用垃圾回收器能够有效地

降低内存泄漏的风险。

2. 关闭未关闭的资源

关闭未关闭的资源能够避免内存泄漏。调用资源时,例如数据库连接、文件流、网络连接等,必须在使用后关闭。使用try-with-resources

语句可以在退出语句块时自动关闭资源。

3. 避免循环引用

在编写代码时要避免循环引用的情况,这会导致对象长时间存在而没

有被垃圾回收机制回收。如果出现循环引用,可以使用弱引用来解决。

4. 使用合适的数据类型

使用合适的数据类型也能够避免内存泄漏的风险。为了管理大量对象

和数据,可以使用集合类型和数组类型,它们是内存高效和可重用的。

5. 检测内存泄漏

最后,可以使用一些工具来检测内存泄漏。例如,Java有一个内置的jmap工具,它可以输出Java进程内存使用情况的概况。还可以使用

一些第三方工具,例如Eclipse Memory Analyzer、Java VisualVM 等,这些工具能够分析内存使用情况,找出泄漏点。

总之,要避免内存泄漏,需要开发人员写出高质量、有效率的代码,

另外,也可以使用一些工具来快速定位并解决内存泄漏问题。

内存溢出的原因有哪些怎么解决

内存溢出的原因有哪些怎么解决

内存溢出的原因有哪些怎么解决

内存溢出是指程序在申请内存空间时,由于申请的内存超过了系统能

够提供给该程序的最大内存限制,导致系统无法为该程序分配足够的内存

空间,从而引发错误或崩溃的情况。内存溢出的原因是多方面的,下面将

介绍其中一些常见的原因以及解决方法。

1. 资源泄露:资源泄露是指程序在使用资源后没有进行正确的释放,导致这些资源一直占据着内存空间。常见的资源包括文件句柄、数据库连接、网络连接等。解决方法是在使用完资源后及时关闭或释放这些资源,

可以使用try-finally或try-with-resources语句块来确保资源的正确

关闭。

2.内存泄露:内存泄露是指程序中的对象不再被使用,但由于一些原

因(如被遗忘的引用、缓存未清理等),这些对象占据了内存空间而无法

被垃圾回收机制回收。解决方法是通过合理的设计和追踪内存使用情况,

及时释放不再使用的对象的引用,避免对象的循环依赖等问题。

3.递归调用:当一个方法在自身内部不断地调用自己,而没有递归终

止条件,就会导致无限递归,并占用大量的内存空间。解决方法是在递归

方法内部设置递归终止条件,避免无限递归的发生。

4.大对象:当程序需要创建非常大的对象,而内存空间不足以容纳这

个大对象时,就会导致内存溢出。解决方法是将大对象分割成多个小对象,或者使用流式处理来逐步处理大对象。

5.内存泄露:如使用者创建循环的静态集合,存储了对象,然后使用

完对象不进行移除,导致内存泄漏,这些创建出来的对象不能被GC回收

6.使用过多的本地变量:在方法、循环体或代码快内定义大量的本地

iis 错误解决办法

iis 错误解决办法

IIS服务器出现错误的原因很多,请尝试以下操作:

1、查看网站属性——文档

看看启用默认文档中是否存在:index.asp index.htm index.html (最好全都有,没有可添加)

2、查看网站属性——主目录

A、本地路径是否指定正确

B、是否勾选‚脚本资源访问‛?

C、是否勾选‚读取‛?

D、执行权限:纯脚本

3、查看网站属性——目录安全性——编辑

A、是否勾选‚匿名访问‛?

B、用户名:IUSR_您的计算机名(不对,就点浏览选择)

C、密码不用改,勾选‚允许IIS控制密码‛就可以了

D、其它不用选

4、查看网站属性——网站

A、IP地址:全部未分配或者选择一个

B、TCP端口:80 (最好不要改,改了访问方法就不一,特别提醒:有些软件会占用80端口,端口被占就启动不了IIS,例如:讯雷)5、打开控制面板——管理工具——计算机管理——本地用户和组——用户

A、看看‚IUSR_您的计算机名‛此用户有没有启动,必须启动(说明:有红色的×表示没有启动)

B、看看‚IWAM_您的计算机名‛此用户有没有启动,必须启动(说明:有红色的×表示没有启动)

C、在‚IWAM_您的计算机名‛该用户上按右键——设置密码(密码要记住,后面还需要用上该密码)

6、打开控制面板——管理工具——组件服务——组件服务——计算机——我的电脑——COM+应用程序

A、在‚IIS Out-Of-Process Pooled Applications‛上按右键选择‘属性’——选择‘标识’,指定用户:IWAM_您计算机名(说明:可以点浏览查找);输入密码,密码上面步骤的密码。再次启动该服务,启动后它会动。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

项目进行SSB改造以后,当客户端从服务器抓起大笔数据的时候,服务器报一个二进制流的错误,这个错误其实是一个内存溢出的错误。

提纲

故障现象

故障分析与解决

Code Review

工具与方法

故障现象

用户反映在进行数据导出时经常出现下面的错误:输入流是无效的二进制格式。开始内容(以字节为单位)是: 53-79-73-74-65-6D-2E-4F-75-74-4F-66-4D-65-6D-6F-72...

坏┏鱿指么砦蠛?/SPAN>,其他后面导出的用户都会出现该错误,导致无法进行操作。

故障分析

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% :

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多种是

0x0ff286b4 1 32 1

0x0ff2858c 1 32 1

0x0ff28464 1 32 1

0x0ff2833c 1 32 1

0x0ff28214 1 32 1

0x0ff280ec 1 32 1

0x0ff27fc4 1 32 1

0x0ff27e9c 1 32 1

0x0ff27d74 1 32 1

0x0ff27c4c 1 32 1

IIS日志分析

平均每天点击数:502,708

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

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

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

每周的星期四系统最繁忙

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

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

Remoting URI修改前最大发送字节/rs2/IInventoryQueryService.rem88171169

/rs2/IEntitySequenceService.rem 33218960

/rs2/IPackDataExportService.rem 25928574

/rs2/ISecondBoxQureryService.rem 22226202

/rs2/IEntityStatusTraceService.rem 18539971

/rs2/ICodesetConfigService.rem 15605161

/rs2/IOutInputInventoryService.rem 12807394

/rs2/IContractQueryService.rem 9365287

/rs2/IEntityTransService.rem 7995269

/rs2/IEntityConfigService.rem 7563326

/rs2/IQualityChkQueryService.rem 5332228

/rs2/IMtlAnalyseService.rem 4457087

/rs2/IProductChangeTransportService.rem 3345024

/rs2/IIMEIQueryService.rem 2970797

/rs2/IMobileAttachService.rem 2479021

/rs2/IGetMaterialService.rem 2294796

/rs2/IProductionInfoService.rem 2214683

/rs2/IMbcBarcodeImeiService.rem 1687604

/rs2/IWsmHighTemperatureScanService.rem 1496996

/rs2/IDataManipulationService.rem 1449580

故障解决

增加w3wp进程可以使用的内存空间

打开boot.ini的 /3GB开关

[boot loader]

timeout=30

default=multi(0)disk(0)rdisk(0)partition(2)\WINNT

[operating systems]

multi(0)disk(0)rdisk(0)partition(2)\WINNT="????" /3GB

相关文档
最新文档