[英]iis 7.5 application pool problems failing
我一直在我們的網站上工作,有時我們會得到奇怪的結果。 IIS應用程序池似乎有問題,並且數據庫連接失敗。 我檢查了數據庫,一切都很好,並且如果我在數據庫中運行sql語句,它的運行速度很快。 然后,在第一次失敗之后,每個人之后都將無法連接到DB,直到我回收IIS應用程序池為止。
我正在檢查我的代碼是否存在內存泄漏。
我確實注意到,當我登錄並於今天早上5點開始工作時,內存使用率為77%,並且在我對系統進行壓力測試之前,現在沒有人登錄。 現在,我確實知道此框上有sql server,因此將占用盡可能多的內存。 我想知道我們是否應該添加更多內存並將sql限制為現在所擁有的內存,並允許將新內存用於IIS。
是否有人是IIS專家,特別是IIS應用程序池設置的專家?
這是我用來調用數據庫的代碼:
dim strU_TmRecord5 as string
strU_TmRecord5 = "Some sql query..."
strSaveSuccessful = exExecuteNonQuery(strU_TmRecord5, "ConnectDBSettings", strUser)
Public Shared Function exExecuteNonQuery(ByVal sqlString As String, ByVal strConnName As String, Optional ByVal strUser As String = "") As Object
Dim strConnString As String = ConfigurationManager.ConnectionStrings(strConnName).ConnectionString
Dim sqlConnection1 As New SqlConnection(strConnString)
Dim returnValue As String = "FAIL"
Dim cmd As New SqlCommand
' NonQuery does not return any data
Try
cmd.CommandText = sqlString
cmd.CommandType = Data.CommandType.Text
cmd.Connection = sqlConnection1
sqlConnection1.Open()
cmd.ExecuteNonQuery()
returnValue = "SUCCESS"
sqlConnection1.Close()
Catch ex As Exception
returnValue = "FAIL"
If sqlConnection1 IsNot Nothing Then
sqlConnection1.Close()
End If
Finally
End Try
Return returnValue
End Function
這是DataReader的代碼:
Dim drDataReader1 As SqlDataReader = Nothing
Dim strGetMgrInfo as string = "sql stuff to get mgr info"
Try
Dim drDataReader As SqlDataReader
ddlMgrName.Items.Clear()
drDataReader = Utilities.exExecuteDataReader(strGetMgrInfo, "DBConnect", strUser)
If drDataReader.HasRows = False Then
lblError1.Visible = True
lblError1.Text = "Invalid Employee Info"
Else
While drDataReader.Read()
ddlMgrName.Items.Add(New ListItem(drDataReader(0).ToString.Trim, drDataReader(1).ToString.Trim))
End While
drDataReader.Close()
End If
Catch ex As Exception
Finally
End Try
Public Shared Function exExecuteDataReader(ByVal sqlString As String, ByVal strConnName As String, Optional ByVal strUser As String = "") As SqlDataReader
Dim returnValue As SqlDataReader = Nothing
' Scalar gets 1st column of 1st row no matter how many records are returned.
Dim strConnString As String = ConfigurationManager.ConnectionStrings(strConnName).ConnectionString
Dim sqlConnection1 As New SqlConnection(strConnString)
sqlConnection1.Open()
Dim cmd As New SqlCommand
exExecuteDataReader = Nothing
cmd.CommandText = sqlString
cmd.CommandType = Data.CommandType.Text
cmd.Connection = sqlConnection1
Try
returnValue = cmd.ExecuteReader(Data.CommandBehavior.CloseConnection)
Return returnValue
Catch ex As Exception
If sqlConnection1 IsNot Nothing Then
sqlConnection1.Close()
End If
End Try
End Function
對於任何生產系統,在同一個盒子上運行IIS和SQL是一個壞主意。 SQL可以限制其內存使用量。 IIS並不是很多(您可以給它一個限制,但是每次使用它時,它只會重擊您的應用程序,這可能不是您想要的)。
內存泄漏是要檢查的第一件事,但您還應確保不泄漏數據庫連接。 您必須關閉/處置這些物品,否則您將完全體驗到自己所看到的。
另外,從第二個查詢函數返回的DataReader
需要連接,因此您可以返回一個同時容納DataReader
和SqlConnection
的一次性對象,並依靠調用者來處理(我不推薦這樣做),或者您可以將數據從DataReader
復制到自定義對象數組(如ORM系統), DataTable
對象或某種其他類型的對象中。 第二種方法是可取的,因為它會盡快捕獲數據,然后釋放連接以供其他請求使用。 第一種方法僅在返回的數據太多而無法合理地保存在內存中的情況下使用。 即使在這種情況下,傳遞某種處理委托並對該函數中的每一行進行處理也可能是更好的設計。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.