【发布时间】:2014-02-17 17:19:12
【问题描述】:
我在一个非常大的高流量电子商务网站上工作。我们目前正在将我们的站点从 ColdFusion 迁移到 .NET。我们最近在此转换过程中遇到了一个问题,我希望能得到一些帮助。我们目前的网站大约是 1/3 .net 和 2/3 ColdFusion。
不过,一个问题是,当我们发布最新项目时,这是一个转换“我的帐户”部分的项目,一段时间内一切正常,但在 3 到 24 小时之间,网站就会崩溃。为了恢复它,我们需要重新启动 IIS,有时还需要重新启动 ColdFusion。当我说崩溃时,我的意思是它只是挂起、坐在那里并永远旋转。
我们有非常好的服务器监控,但是当我们查看服务内存时,除了与 SQL 的连接数外,没有什么异常。出于某种原因,在崩溃 SQL 连接数激增之前相当快,它从大约 24 个连接增加到大约 100 个,只是坐在那里,站点停止运行,直到我们重新启动服务。
我们目前使用 SQL Server 2005,实体框架作为我们的数据访问方法,并且我们使用的是 IIS 7.5。我们的网络服务器是虚拟的,但我们的数据库是物理的。
我们的团队中有多个人检查了这个新项目中的所有代码,以确认他们没有任何连接处于打开状态,因为连接问题看起来是这样的。我们找不到任何打开的连接,没有一个。
这是我们当前对实体的数据访问的示例:
/// <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 中的死锁或超时?
-
可能弄清楚这些新 SQL 连接中的每一个都在做什么(正在运行什么查询),这可能有助于了解为什么要创建它们。
-
我们在其中一次崩溃之前和期间运行了 SQL 分析器,但没有发现任何异常情况。
-
我们运行 SP_WHO2 来查看峰值发生后的活动连接,并且大多数新连接都处于休眠状态
-
您有更多关于 GetProductsByPrimaryCatId 方法的信息吗?
标签: c# asp.net iis coldfusion