memory怎么改

memory怎么改,第1张

1.找到php.ini这个文件,对于Linux用户,你可以通过执行“php -i | grep Loaded Configuration File”来找到对应的配置文件。而Windows用户,你可以尝试修改你的php安装目录下的php.ini。

2.编辑php.ini 在php.ini中,找到“memory_limit”这一项,如果没有,你可以在文件的尾部自己增加这个参数。以下是一些设置范例

memory_limit = 128M 可以将128M改为任何你想设置的值

保存文件

3.重启web 服务器

还有 就是在运行时修改php的内存设置

在你的php代码中增加以下命令行即可。

ini_set('memory_limit','128M')

32位 *** 作系统的寻址空间是4G,其中有2G被 *** 作系统占用,也就是说留给用户进程的内存只有2G(其中还要扣除程序加载时映像占用的部分空间,一般只有1.6G~1.8G左右可以使用)。 如果进程运行中需要申请内存,而 *** 作系统无法为其分配内存空间,则会产生内存不足的异常,在.net中为System.OutOfMemoryException(The exception that is thrown when there is not enough memory tocontinue the execution of a program.)。 虽然最终的表现都为OutOfMemoryException,但其产生的原因可能是不一样的,动手解决此问题之前需要先对进程当前内存的使用状态进行分析,找出正确的原因,才能对症下药。下面分享一下调试此类问题的一些心得。

更多内容请参考:http://blog.csdn.net/lazyleland/article/details/6704661

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

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

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

微软推荐的ASP.NET进程占用内存是不超过60%,并最好使计算出的实际值不超过t="on">800M。就是说,对于一台t="on">4G内存的服务器,最好将“memoryLimit”属性设置成“20”。设置一个适当的回收阈值,让IIS适时的进行进程回收,对于保证整个服务器的稳定运行,避免OutOfMemoryException是非常重要的。

在IIS6中,ASP.NET进程的回收阈值不再由配置节中的“memoryLimit”属性决定,而是由IIS管理器中的应用程序池配置中的设置决定。

但是,即使正确设置了这些配置,也不能保证完全避免OutOfMemoryException的发生,原因可能是多样而复杂的,比如内存回收 *** 作可能耗时太多等等。开发人员要注意的,就是在代码中时刻牢记不要无谓的使用和浪费内存。:)

如果你有一台大内存的服务器,同时对Win32 *** 作系统中对于进程最高使用t="on">2G内存的限制很郁闷,可选的解决方法有两个:

1.使用/3GB模式启动计算机,方法参加文后的链接

2.使用Windows Server 2003 64bits Edition

避免内存溢出的几点要素

如果要创建数组,请确保其大小正确。

确保有足够的内存用于内部用途和新的托管对象。

如果您正在 .NET Compact Framework 上进行编程,当没有足够的内存可用于内部用途或新的托管对象时,公共语言运行库会引发此异常。要避免此异常,应避免编写占用 64KB 或更多内存的大方法。

过多的托管内存使用量通常由以下因素造成:

1.将大型数据集读入内存中。

2.创建过多的缓存条目。

3.上载或下载大文件。

4.在分析文件时过多地使用正则表达式或字符串。

5.过多的视图状态。

6.会话状态中有过多的数据或者会话过多。

7.当对 COM 对象调用一个方法,并且该方法返回包含安全数组(大小不固定的数组)的用户定义类型时,可能引发此异常,并附带一条额外的消息“存储空间不足,无法完成此 *** 作”。这是因为 .NET Framework 无法封送带有安全数组类型的结构字段。

一种不当使用字节数组导致内存溢出的情况举例

public partial class _Default : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

byte[] bytes = File.ReadAllBytes("D:\toClient.xls")//toClient.xls 大小为20M

Response.BinaryWrite(bytes)

}

}

上面的程序如果所输出的文件特别大的话,有可能会直接报:System.OutOfMemoryException。正确的做法是把文件的字节流分段输出,其实asp.net有现成的方法Response.WriteFile(filePath)就是这么做的。

如下是正确的写法:

Response.ContentType = "application/octet-stream"

Response.AddHeader("Content-Disposition", "attachmentfilename=" + HttpUtility.UrlEncode(downloadName, System.Text.Encoding.UTF8))

Response.Write www.hnnedu.com File("D:\toClient.xls")

Response.Flush()

Response.End()

当asp.net出现内存溢出时,一种简单的处理方法是马上回收应用程序池。但是这样并没有彻底解决问题。

创建Image类型时出现内存溢出(System.OutOfMemoryException)

错误代码: System.Drawing.Image myimg=System.Drawing.Image.FromFile(file.FullName)

当打开的文件不是图像文件时会引发的异常:

MSDN:如果文件没有有效的图像格式,或者如果 GDI+ 不支持文件的像素格式,则此方法将引发 OutOfMemoryException 异常。

这样的异常信息容易让人误解。

检查ASP NET Session是否失效 是否超时 默认是 分钟 设置的方法是Session TimeOut= 或者您可以设置到更高 这个数值的单位是分钟 大家视情况而定

检查代码有无Session Abandon()之类的 一旦调用 Abandon 方法 当前会话不再有效 同时会启动新的会话

ASP NET中使用了ACCESS数据库 而且数据库是放在bin目录中的 解决方法是不要放会更新的文件在BIN目录中

从同一个页面传到另一个页面才能延续同一个session 也就是说session不可跨域 同时客户端一关闭浏览器或一关闭浏览页 Session也消失了 再次访问时又会创建新的Session 但还会在服务器上存活等待超时 只是调用不到了   另外比如在第一个页面置了SESSION 然后REDIRECT去第二个页面 解决方法是在REDIRECT中设置endResponse为FALSE

Iframe丢Session的原因 session是客户端和服务器端共同认证的 客户端存储标识 通过附加在页面的头发送给服务器端 服务器进行识别 如果符合条件就可以获得相应的session *** 作权

但如果页面是来自框架的 而框架的父页和框架不是一个站点的话 客户端默认是禁止向页面附加头信息的 这样服务器端就无法识别客户端框架里面的页面 自然不能 *** 作Session 解决办法:  Response AddHeader( P P CP=CAO PSA OUR )   或者在Window服务中将 State Service 启动

有些杀病毒软件会去扫描您的Web Config文件 那时Session肯定掉 这是微软的说法 解决办法:  使杀病毒软件屏蔽扫描Web Config文件(程序运行时自己也不要去编辑它)

ASP NET默认配置下 Session莫名丢失的原因及解决办法

正常 *** 作情况下Session会无故丢失 因为程序是在不停的 *** 作 排除Session超时的可能 另外 Session超时时间被设定成 分钟 不会这么快就超时的

现在我就把原因和解决办法写出来

ASP NET Session失效的原因

由于程序是默认配置 所以Web Config文件中关于Session的设定如下

<sessionState mode= InProc  stateConnectionString= tcpip= :

sqlConnectionString= data source= Trusted_Connection=yes  cookieless= true

timeout= />

我们会发现sessionState标签中有个属性mode 它可以有 种取值 InProc StateServer?SQLServer(大小写敏感) 默认情况下是InProc 也就是将Session保存在进程内(IIS 是aspnet_wp exe 而IIS 是W wp exe) 这个进程不稳定 在某些事件发生时 进程会重起 所以造成了存储在该进程内的Session丢失

哪些情况下该进程会重起呢?微软的一篇文章告诉了我们

配置文件中processModel标签的memoryLimit属性

Global asax或者nfig文件被更改

Bin文件夹中的Web程序(DLL)被修改

杀毒软件扫描了一nfig文件

更多的信息请参考PRB: Session variables are lost intermittently in applications

ASP NET Session失效的解决办法

前面说到的sessionState标签中mode属性可以有三个取值 除了InProc之外 还可以为StateServer SQLServer 这两种存Session的方法都是进程外的 所以当aspnet_wp exe重起的时候 不会影响到Session

现在请将mode设定为StateServer StateServer是本机的一个服务 可以在系统服务里看到服务名为 State Service的服务 默认情况是不启动的 当我们设定mode为StateServer之后 请手工将该服务启动

这样 我们就能利用本机的StateService来存储Session了 除非电脑重启或者StateService崩掉 否则Session是不会丢的(因Session超时被丢弃是正常的)

除此之外 我们还可以将Session通过其他电脑的StateService来保存 具体的修改是这样的 同样还在sessionState标签中 有个stateConnectionString= tcpip= : 属性 其中有个ip地址 默认为本机( ) 你可以将其改成你所知的运行了StateService服务的电脑IP 这样就可以实现位于不同电脑上的程序互通Session了

如果你有更高的要求 需要在服务期重启时Session也不丢失 可以考虑将mode设定成SQLServer 同样需要修改sqlConnectionString属性 关于使用SQLServer保存Session的 *** 作 在使用StateServer或者SQLServer存储Session时 所有需要保存到Session的对象除了基本数据类型(默认的数据类型 如int string等)外 都必须序列化 只需将[Serializable]标签放到要序列化的类前就可以了

[Serializable]

public class MyClass

{

lishixinzhi/Article/program/net/201311/12478


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11354385.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存