我一个非常大的,高流量的电子商务网站合作。我们目前正在将我们的网站从ColdFusion迁移到.NET。我们最近在转换期间遇到了一个问题,我希望得到一些帮助。我们目前的网站大约是1/3 .net和2/3的ColdFusion。.NET网站崩溃
一个问题虽然是,当我们发布了最新的项目,这是一个项目转换的我的账户,一切都很好了一段时间,但在任何地方3至24小时之间的网站刚刚崩溃。为了恢复它,我们需要重新启动IIS,有时还需要重新启动ColdFusion。当我说崩溃时,我的意思是它只是挂起,坐在那里并永远旋转。
我们有很好的服务器监控,但是当我们看服务内存没什么,除了连接到SQL的号码是不寻常的。出于某种原因,在SQL发生崩溃之前相当快速地发生了连接数量,它从大约24个连接到大约100个,只是坐在那里,并且该站点停止运行,直到我们重新启动服务。
我们目前使用SQL Server 2005中,实体框架作为我们的数据访问方法和我们的IIS 7.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<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();
}
}
再次,这是我们在C#中的数据访问方法之一的一个例子。没有看到这个问题吗?我们再一次使用这种格式。我们已经证实这一点。
有了新的.NET项目中,我们使用.NET成员提供。我们使用CLR通过散列加密用户密码,以便我们可以在CF中使用相同的散列方法。不知道这是否是问题,但认为值得一提。
任何想法?
SQL连接数量在崩溃之前爆发的事实表明数据库问题。它可能是SQL Server中的死锁或超时? – recursive
大概找出每个这些新的SQL连接正在做什么(正在运行哪些查询),这可能会揭示它们为何被创建的原因。 –
我们在这些崩溃之前和期间运行SQL分析器,并没有看到任何超出规范的东西。 – user3320043