Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET网站崩溃_C#_Asp.net_Iis_Coldfusion - Fatal编程技术网

C# .NET网站崩溃

C# .NET网站崩溃,c#,asp.net,iis,coldfusion,C#,Asp.net,Iis,Coldfusion,我在一个非常大、流量很大的电子商务网站上工作。我们目前正在将我们的站点从ColdFusion迁移到.NET。我们最近在转换过程中遇到了一个问题,我希望能得到一些帮助。我们目前的网站大约是1/3.net和2/3 ColdFusion 但有一个问题是,当我们发布最新的项目时,这是一个转换“我的帐户”部分的项目,在一段时间内一切正常,但在3到24小时之间的任何地方,网站都会崩溃。为了备份它,我们需要重新启动IIS,有时还需要重启ColdFusion。当我说崩溃,我的意思是它只是挂起来,坐在那里,永远旋

我在一个非常大、流量很大的电子商务网站上工作。我们目前正在将我们的站点从ColdFusion迁移到.NET。我们最近在转换过程中遇到了一个问题,我希望能得到一些帮助。我们目前的网站大约是1/3.net和2/3 ColdFusion

但有一个问题是,当我们发布最新的项目时,这是一个转换“我的帐户”部分的项目,在一段时间内一切正常,但在3到24小时之间的任何地方,网站都会崩溃。为了备份它,我们需要重新启动IIS,有时还需要重启ColdFusion。当我说崩溃,我的意思是它只是挂起来,坐在那里,永远旋转

我们有非常好的服务器监控,但是当我们查看服务内存时,除了与SQL的连接数之外,没有什么不寻常的。由于某种原因,在崩溃SQL的连接数迅速增加之前,它会从24个连接增加到100个左右,只是停留在那里,站点会关闭,直到我们重新启动服务

我们目前使用SQLServer2005实体框架作为数据访问方法,我们使用的是IIS7.5。我们的web服务器是虚拟的,但我们的数据库是物理的

我们的团队中已经有多个人检查了这个新项目中的所有代码,以确认他们没有被打开的连接,这是基于连接问题的。我们找不到任何打开的连接,一个也找不到

这是我们当前对实体数据访问的一个示例:

    /// <summary>
    /// Get Products by their Primary Category ID.  Default Category ID is 0: Top Level Categories.
    /// </summary>
    /// <param name="languageCode">Two character language code of Categories being searched.  Defined in dbo.Languages, LanguageCode field.</param>
    /// <param name="primaryCategoryId">int - Primary Category ID</param>
    /// <returns>List&lt;Product%gt;</returns>
    public List<Products.Product> GetProducts(string languageCode, int primaryCategoryId = 0)
    {
        CatalogEntity context = null;
        EntityConnection conn = null;

        try
        {
            conn = this.GetConnection();
            context = new CatalogEntity(conn);

            List<I_Products> Products = context.GetProductsByPrimaryCatId(primaryCategoryId, languageCode).Distinct().ToList();
            return Products.Select(Product => new Products.Product(Product)).Distinct().ToList();
        }
        catch (System.Exception ex)
        {
            string message = "Error occurred while calling GetProducts.";
            throw new Exception.CatalogDataException(message, CodeLibrary.Core.Helpers.ProcessHelper.GetProcessName(this), ex);
        }
        finally
        {
            if (conn != null && conn.State == ConnectionState.Open) conn.Close();
            if (context != null) context.Dispose();
            conn.Dispose();
        }
    }
//
///按主要类别ID获取产品。默认类别ID为0:顶级类别。
/// 
///正在搜索的类别的两字符语言代码。在dbo.Languages、LanguageCode字段中定义。
///int-主要类别ID
///列表产品%gt;
公共列表GetProducts(字符串语言代码,int primaryCategoryId=0)
{
CatalogEntity上下文=null;
EntityConnection conn=null;
尝试
{
conn=this.GetConnection();
上下文=新目录实体(conn);
List Products=context.GetProductsByPrimaryCatId(primaryCategoryId,languageCode).Distinct().ToList();
return Products.Select(Product=>new Products.Product(Product)).Distinct().ToList();
}
catch(System.Exception-ex)
{
string message=“调用GetProducts时出错。”;
抛出新的Exception.CatalogDataException(消息,CodeLibrary.Core.Helpers.ProcessHelper.GetProcessName(this),ex);
}
最后
{
如果(conn!=null&&conn.State==ConnectionState.Open)conn.Close();
if(context!=null)context.Dispose();
conn.Dispose();
}
}
同样,这只是C#中数据访问方法之一的一个示例。你看不出这有什么问题,是吗?同样,我们全面使用这种格式。我们已经证实了这一点

对于新的.net项目,我们使用.net成员资格提供程序。我们使用CLR用散列加密用户密码,以便在CF中使用相同的散列方法。不确定这是否是问题所在,但认为值得一提


有什么想法吗?

这里有一个可能性列表。例如,当对SQL server的调用未能将数据返回到CF时,CF可以挂起到线程上。它变成了一种“幻象线程”。CF然后创建到DB服务器的新连接,并将它们添加到连接池中,从而产生许多额外的连接。它根据CF admin中的“同步请求”设置进行计数。当有足够多的请求“挂起”时,您的请求队列和服务器将被锁定,即使看起来没有发生任何事情。您可以通过启用度量、使用服务器监视器(如果在企业版上)或使用fusionreactor(用于CF/Java服务器的一种优秀且廉价的第三方内省监视器)来查看此行为

当然,这就是正在发生的事情。你必须找出它发生的原因。这些可能性包括:

  • 网络-有时交换机端口上的自动同步会中断连接并导致挂起“虚拟”线程。请参阅上的这篇文章
  • 数据库锁定-这可能会产生类似这样的问题,即使您认为自己没有看到,也可能会发生。有时很难抓住。一个可能很麻烦的特定锁定问题是“”,它可能导致看起来相当空闲的DB连接仍然挂起
您可能需要获得更多关于CF方面的信息,才能确切了解这里发生了什么



跟进。。。我从CF方面提供了一些可能性,尽管您的问题来自.NET方面。我假设CF可能会起作用,因为重启CF有时会解决问题。

SQL连接数在崩溃前出现峰值这一事实表明数据库存在问题。这可能是SQL Server中的死锁或超时吗?可能要弄清楚每个新的SQL连接都在做什么(正在运行哪些查询),这可能有助于了解创建这些连接的原因。在其中一次崩溃之前和期间,我们运行了SQL profiler,没有发现任何异常情况。我们运行了SP_WHO2以查看出现峰值后的活动连接,大多数新连接处于休眠状态。您有关于GetProductsByPrimaryCatId的更多信息方法?