w3wp.exe内存占用问题,大家帮帮忙!急啊! 最近我部署了一个ASP.NET程序,用一段时间后就死掉了!w3wp.exe内存大概占用70M,结束此进程后,系统就可以用了,不过过一段时间后又死掉了,请问该怎么处理?是我程序设计的问题还是IIS配置的问题,请高人指点,分数不够还可以另外给,谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 w3wp.exe你一运行ASp.net应用程序就会启动的,你不用管它!你应该看看程序! 我就是不知道程序错在哪儿?在网上查说跟Session用关!我的程序用了一些session 在IIS6下,经常出现w3wp的内存占用不能及时释放,从而导致服务器响应速度很慢。今天研究了一下,可以做以下配置:1、在IIS中对每个网站进行单独的应用程序池配置。即互相之间不影响。2、设置应用程序池的回收时间,默认为1720小时,可以根据情况修改。同时,设置同时运行的w3wp进程数目为1。再设置当内存或者cpu占用超过多少,就自动回收内存一般来说,这样就可以解决了。但仍然会出现个别网站因为程序问题,不能正确释放。那么,怎么样才能找到是哪一个网站的?1、在任务管理器中增加显示pid字段。就可以看到占用内存或者cpu最高的进程pid2、在命令提示符下运行iisapp -a。注意,第一次运行,会提示没有js支持,点击确定。然后再次运行就可以了。这样就可以看到pid对应的应用程序池3、到iis中察看该应用程序池对应的网站,就ok了 http://www.vpcblog.net/blogview.asp?logID=475 jimu8130(虚荣心发作了,想得到msmvp称号发疯了)讲详细一点!给我说一下具体步骤吧!我是菜鸟! jimu8130(虚荣心发作了,想得到msmvp称号发疯了)我有看那篇文章,不过不怎么会设置IIS,不知道是不是用了Session的原因! session如果及时释放以及运用合理的话不会这么高,你可以考虑有些地方使用cookie咯?至于设置的,你可以仔细查看下控制面板管理工具下的 iis管理器, 我就是不太会设置这个东东,急用!还来不及看!你是用什么方式释放session的 我以前出个这个问题我发现每次出现这个问题的时候都是我的asp.net代码读取数据库发生错误的时候所以每次出现这样的问题,我就先把w3wp.exe关掉再检查代码里的错误然后再试就好了呵呵,每人的情况可能不同这只是我的一个解决方法 我发现每次出现这个问题的时候都是我的asp.net代码读取数据库发生错误的时候所以每次出现这样的问题,我就先把w3wp.exe关掉再检查代码里的错误我这好像也是在读取数据库时出现问题,你说先把w3wp.exe关掉再检查代码,不会是每次出错都要人为的关一下w3wp.exe吧?请详细的说一下! 在程序开发中,特别是WEB方面,如果访问量大的话,session是占用很大内存的! fds2003(Hunter) ,不过提示是访问数据库有问题!而且在死掉时,内存占用也不大(w3wp.exe才70M,SQL才120M),我的服务器是2G的内存!我就是想不明白!如果内存占得很多还好说,但是内存占用量也不大!请高人指点,谢谢! 比较正常把。我的w3wp 一般也是这个。(从60万行数据中,查找大约8k行记录的asp.net站点) junzhang4008(不会飞的猪) 大概你没怎么看我的问题!我的问题是这个时候系统就不能用了,非常慢! ASP。NET 2.0 新技术讨论群:20810637(群主) 哦。呵呵8好意思,没看清楚。最好所有的能手工释放资源的地方我都会手工释放的。不太相信c#的垃圾回收机制,有的时候很好,有的时候c#的垃圾回收机制 确实很垃圾 :)比如DataSet ds = new null;........try{ open数据库; 填充ds; 绑定显示;}catch{ 捕捉异常}finally //手工释放资源 { if (ds != null) { ds.Dispose(); } if (数据库打开 != null) { 数据库关闭 } ...............释放其他比如DataView,.....的资源}估计你的程序有的地方有问题把。 在每次做完操作后,要用Conn.Close(),还要不要用Conn.Disponse了啊! //////////////////////////////////////////////////////////////////////// //名称 : string ReturnSqlValue(string sqlstring ,string filed) //功能 : 连接数据库并执行传递过来的sql语句,返回指定字段的数据值(以字符串传回) //传入类型: string string //传入参数: sql查询语句,指定的返回字段 //返回类型; string //返回值 : 返回查询出来的对应filed的值 //////////////////////////////////////////////////////////////////////// public string ReturnSqlValue(string sqlstring ,string filed) { OleDbConnection MyConnection= null; OleDbCommand MyCommand=null; OleDbDataReader MyDatareader=null; try { MyConnection=new OleDbConnection(GetConnectionString()); MyCommand=new OleDbCommand(sqlstring,MyConnection); MyConnection.Open(); MyDatareader=MyCommand.ExecuteReader(); if (MyDatareader.Read()) { return Convert.ToString(MyDatareader[filed]); } else { return null; } } catch { return null; } finally { if(MyCommand!=null) { MyCommand.Dispose(); } if(MyDatareader!=null) { MyDatareader.Close() ; } if (MyConnection!=null) { MyConnection.Close(); MyConnection.Dispose(); } } } 一个access数据库的例子 woanon(嗳老虎游)怎么说?能说详细一点吗? 关于ImageMap的问题 动态增加表格的数据读取问题? 下了oxite,为什么那个网站的OxiteSite项目无法打开,装的vs2008 求工作流资料或例子 急,急,急!啊!!!!!!!!!! 刚做了个关于百度的MP3小偷程序,大家测试一下 简单问题,如何得到post过来的表单数据? 为什么HttpCookie.Expires设置失效有问题? 时间日期格式化问题----在线等 救急!!!谁来救救我啊!!! 怎么不行呀 .NET2.0里用了母版页后还可以用框架吗?或者说二者可以混用吗?
今天研究了一下,可以做以下配置:
1、在IIS中对每个网站进行单独的应用程序池配置。即互相之间不影响。
2、设置应用程序池的回收时间,默认为1720小时,可以根据情况修改。同时,设置同时运行的w3wp进程数目为1。再设置当内存或者cpu占用超过多少,就自动回收内存
一般来说,这样就可以解决了。但仍然会出现个别网站因为程序问题,不能正确释放。
那么,怎么样才能找到是哪一个网站的?1、在任务管理器中增加显示pid字段。就可以看到占用内存或者cpu最高的进程pid
2、在命令提示符下运行iisapp -a。注意,第一次运行,会提示没有js支持,点击确定。然后再次运行就可以了。这样就可以看到pid对应的应用程序池
3、到iis中察看该应用程序池对应的网站,就ok了
至于设置的,你可以仔细查看下控制面板管理工具下的 iis管理器,
所以每次出现这样的问题,我就先把w3wp.exe关掉
再检查代码里的错误我这好像也是在读取数据库时出现问题,你说先把w3wp.exe关掉再检查代码,不会是每次出错都要人为的关一下w3wp.exe吧?请详细的说一下!
........try
{
open数据库;
填充ds;
绑定显示;
}
catch
{
捕捉异常
}
finally //手工释放资源
{
if (ds != null)
{
ds.Dispose();
}
if (数据库打开 != null)
{
数据库关闭
}
...............释放其他比如DataView,.....的资源
}估计你的程序有的地方有问题把。
//名称 : string ReturnSqlValue(string sqlstring ,string filed)
//功能 : 连接数据库并执行传递过来的sql语句,返回指定字段的数据值(以字符串传回) //传入类型: string string
//传入参数: sql查询语句,指定的返回字段 //返回类型; string
//返回值 : 返回查询出来的对应filed的值
////////////////////////////////////////////////////////////////////////
public string ReturnSqlValue(string sqlstring ,string filed)
{
OleDbConnection MyConnection= null;
OleDbCommand MyCommand=null;
OleDbDataReader MyDatareader=null;
try
{
MyConnection=new OleDbConnection(GetConnectionString());
MyCommand=new OleDbCommand(sqlstring,MyConnection);
MyConnection.Open();
MyDatareader=MyCommand.ExecuteReader();
if (MyDatareader.Read())
{
return Convert.ToString(MyDatareader[filed]);
}
else
{
return null;
}
}
catch
{
return null;
}
finally
{
if(MyCommand!=null)
{
MyCommand.Dispose();
} if(MyDatareader!=null)
{
MyDatareader.Close() ;
} if (MyConnection!=null)
{
MyConnection.Close();
MyConnection.Dispose();
} } } 一个access数据库的例子