gpt4 book ai didi

c# - .NET 网站崩溃

转载 作者:太空宇宙 更新时间:2023-11-03 16:00:07 26 4
gpt4 key购买 nike

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

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

我们有非常好的服务器监控,但是当我们查看服务内存时,除了与 SQL 的连接数之外,没有任何异常。由于某种原因,在崩溃之前,SQL 的连接数量迅速增加,从大约 24 个连接增加到大约 100 个,就这样停在那里,直到我们重新启动服务,站点才会停止运行。

我们目前使用 SQL Server 2005 Entity Framework 作为我们的数据访问方法,我们使用的是 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&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();
}
}

同样,这只是我们在 C# 中的一种数据访问方法的一个示例。你看不出有什么问题吗?同样,我们全面使用这种格式。我们已经确认了这一点。

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

有什么想法吗?

最佳答案

这里有一个可能性列表。例如,当对 SQL Server 的调用无法将数据返回给 CF 时,CF 会卡在线程上。它变成了一种“幻影线程”。 CF 然后创建到数据库服务器的新连接并将它们添加到连接池中——导致您看到许多额外的连接。它被计入 CF 管理员中的“同时请求”设置。当它们中有足够多的“挂起”你的请求队列时,你的服务器就会锁定,即使它没有出现任何事情。您可以通过启用指标、使用服务器监视器(如果在企业版上)或使用 fusionreactor(用于 CF/Java 服务器的出色且廉价的第 3 方内省(introspection)监视器)来查看此行为。

当然,这就是正在发生的。你必须找出它发生的原因。其中的可能性是:

  • 网络 - 有时端口自动同步到您的交换机可能会中断连接并导致挂起“幻影”线程。请参阅 Hanging jrun and networking 上的这篇文章.
  • 数据库锁定 - 这会产生这样的问题,即使您认为自己没有看到它也可能会发生。有时很难捕获。一个特别棘手的锁定问题是“max degree of parallelism”,它可能会导致看似相当空闲的数据库连接仍然挂起。

您可能需要获得更多关于 CF 方面的信息,才能准确了解这里发生的事情。


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

关于c# - .NET 网站崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21835361/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com