aspnet开发的新站点,发现aspnet_wp.exe内存不断上升,很快就到400多M,服务器就出现异常,非常缓慢。
aspnet_wp.exe  (PID: 1900)被回收,因为内存消耗超过了 306 MB (可用 RAM 的百分之 60)。 这个过程需要1-3分钟时间。这期间无法访问网站, 会提示:服务器忙! 
网上搜索了一下,很多人遇到这个问题。但是都没有完善的解决办法。
听说如果服务器是2003就能解决这个问题,不知道是不是真的。
有没有人遇到这个问题,如何解决的啊?

解决方案 »

  1.   

    因为内存消耗超过了 306 MB (可用 RAM 的百分之 60)。 这个过程需要1-3分钟时间。
    你设置了回收选项.在应用程序池..首先还是要看程序是不是有打开没有关闭的联连..这样联接数多的话CPU就会上升...用2003也有应用程序池..不过性能和安全性应该比2000好点(个人认为.当然还要看自己怎么设法)
      

  2.   

    1.程序循环控制请注意.
    2.数据库资源及时关闭
    3.适当的时候调用System.GC.Collect();方法,手动回收资源.
      

  3.   

    到Microsoft.com上去把ASP.net的补丁打上看看..
      

  4.   

    为了避免这个问题。我把所有代码都修改了。 把什么东西都及时释放。
    比如:dataset ds = ...
    ds.dispose();
    MemberAccount account = new MemberAccount();
    ...
    account = null;
    hashtable htbl = new hashtable();
    ...
    htbl = null;...这样内存增加速度慢了一点点。还是持续增加。我10分钟强制内存回收:System.GC.Collect();
    这样也没一点效果。
      

  5.   

    window update 已经没发现最新更新了。
      

  6.   


    dataset ds = ...
    ds.dispose();
    MemberAccount account = new MemberAccount();
    ...
    account = null;
    hashtable htbl = new hashtable();
    ...
    htbl = null;...应该用using,using才能保证必然释放。另外递归中的局部变量一定要保持苗条。如:
    using ( DataSet ds = ... )
    {}
      

  7.   

    内存及时回收。用过的什么 session 的东西,用完了及时删除。
      

  8.   

    我几乎没有用session。只是验证码用到了session。
      

  9.   

    这个进程你可以直接杀掉的,.net会将他自动的重启起来,不会有什么影响,但是这样做只是暂时的方法,最终的解决办法,还是从代码来优化。
      

  10.   

    http://blog.csdn.net/goody9807/archive/2004/12/31/235464.aspx
      

  11.   

    goody9807() :经常看到你的影子啊。
    不过你的URL是解决CPU100%问题。我现在是内存上升。CPU正常。
      

  12.   

    尽量不要向Session中存放东西,Application中也尽量少存放数据。尽量将数据放入到DotNet带的ViewState中。
    总之优化程序吧。
      

  13.   

    aspnet开发的新站点 放的服务器是什么你的机器是超线程的吧 而且是512M内存以上吧 
    我同事的机器也有过 你所说的现象而且你的机器装了Visual source safe了吗
      

  14.   

    回答Goody: 服务器是dell的,内存512M, 服务器上没装vss
      

  15.   

    private void bindNewsList()
    {
    Hashtable htbl = new Hashtable();
    htbl.Add("Item2", dropItem.StsItem);
    htbl.Add("Title", txtTitle.Text);
    htbl.Add("Commend", radlCommend.SelectedItem.Value);
    htbl.Add("PostDate1", txtBDate.Text);
    htbl.Add("PostDate2", txtEDate.Text); int pageIndex=pageNewsList.PageIndex;
    if(pageIndex==0)pageIndex=1; NewsOperate newscontent=new  NewsOperate();
    RecordSet rs=newscontent.GetNewsContentList("NewsContentList",htbl,"none",pageIndex,30);
    dgrdNewsList.DataSource=rs;
    dgrdNewsList.DataBind();
    pageNewsList.PageCount = rs.PageCount;
    pageNewsList.PageIndex = rs.PageIndex;
    pageNewsList.RecordCount = rs.RecordCount;
    rs.Clear();
    rs.Dispose();
    newscontent = null;
    htbl = null;
    } 贴上一段新闻搜索代码,
      

  16.   

    业务层:(RecordSet是我改写的DataSet,加了分页信息)
    public RecordSet GetNewsContentList(string str, Hashtable htbl,string orderName, int pageIndex, int pageSize)
    {
    NewsContentDB accountDB = new  NewsContentDB();
    RecordSet rs = accountDB.Record(str,htbl,orderName,pageIndex,pageSize);
    return rs;
    }
      

  17.   

    数据层:
    /// <summary>
    /// 记录集(带分页信息)
    /// </summary>
    /// <param name="str">DataSet名</param>
    /// <param name="htbl">参数值</param>
    /// <param name="orderType">排序方式,1为降序,0为升序</param>
    /// <param name="pageIndex">页码</param>
    /// <param name="pageSize">每页记录数</param>
    /// <returns>返回一个数据集RecordSet</returns>
    public virtual RecordSet Record(string str, Hashtable htbl, string orderName, int pageIndex, int pageSize)
    {
    SqlParameter[] parms = GetRecordParameters(htbl);
    SqlParameter[] pparms=new SqlParameter[]{
    new SqlParameter("@OrderName",SqlDbType.VarChar,20),
    new SqlParameter("@PageIndex",SqlDbType.Int),
    new SqlParameter("@PageSize",SqlDbType.Int),
    new SqlParameter("@PageCount",SqlDbType.Int),
    new SqlParameter("@RecordCount",SqlDbType.Int)
    };
    pparms[0].Value=orderName;   
    pparms[1].Value=pageIndex;   
    pparms[2].Value=pageSize;
    pparms[3].Direction=ParameterDirection.Output;
    pparms[4].Direction=ParameterDirection.Output; SqlCommand cmd = new SqlCommand();
    SqlConnection conn = new SqlConnection(SQLHelper.CONN_STRING_NON_DTC); SQLHelper.PrepareCommand(cmd, conn, null, CommandType.StoredProcedure, RecordSP, parms);
    foreach(SqlParameter parm in pparms)
    {
    cmd.Parameters.Add(parm);
    } SqlDataAdapter dap= new SqlDataAdapter();
    dap.SelectCommand = cmd;
    cmd.ExecuteNonQuery(); RecordSet rst = new RecordSet(pageSize, pageIndex, Convert.ToInt32(cmd.Parameters["@PageCount"].Value), Convert.ToInt32(cmd.Parameters["@RecordCount"].Value)); dap.Fill(rst); conn.Close(); return rst;
    }
      

  18.   

    数据层底层:
    public static DataSet ExecuteDataset(string DataSetName, string connString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
    {
    SqlCommand cmd = new SqlCommand();
    SqlConnection conn = new SqlConnection(connString); try
    {
    PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
    SqlDataAdapter dap= new SqlDataAdapter();
    dap.SelectCommand = cmd;
    DataSet dst = new DataSet(DataSetName); dap.Fill(dst); conn.Close();
    return dst;
    }
    catch(Exception e)
    {
    conn.Close();
    SystemLogs.WriteLog(e.ToString());
    throw;
    }
    }
      

  19.   

    htbl = null;
    不要这样写,试试htbl.Dispose();
      

  20.   

    搂主,根据你的应用情况确定硬件资源是否真的足够然后从配置和应用出发分别做检查配置
    1、如果你的服务器只做web应用,且内存512M还有剩余的话,可以考虑增大aspnet进程的内存限制,默认为60%,超过aspnet就会自动回收,然后重新启动一个aspnet进程提供服务,在machine.config里适当增大memoryLimit的比率(如80%)或IIS(6.0)设定回收上限。注意:aspnet在不启动3gb开关的情况下,只能用到800M,楼主这里就不存在这种情况,不用考虑。2、多个CPU或超线程CPU,内存足够的话,可以考虑启动webgarden,每个CPU启用一个进程。应用
    1、对资源的使用、释放要及时,对数据库的连接是否及时释放,可以监控db server的connection确定。2、如果启用了db connectio pool,对pool池的大小控制一下(通常不会超过100个)。3、监测asp.net的0代、1代、2代对象的数目,判定是否适当的进行了释放,条件允许的话,使用clr profiler探测aspnet活动内存究竟是怎样分配掉的。4、是否存在大量的缓冲对象,大量的字串操作(str1+str2)使用StringBuilder。5、使用try finally 及时释放database connections, data readers, files, streams, network connections, and COM object
      

  21.   

    另外,如果一次获取记录集比较大的话,分页最好使用Server-side paging,aspnet的datagrid分页应该是在web端做的,不适用于大数据量的访问。(耗内存和处理器)
      

  22.   

    重点检查循环,递归。尤其并发量大的叶面代码,检查变量生命尤其是指类型变量sorry , I use english system, there is some problem with IME