我一個非常大的,高流量的電子商務網站合作。我們目前正在將我們的網站從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