簡體   English   中英

iis 7.5應用程序池問題失敗

[英]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需要連接,因此您可以返回一個同時容納DataReaderSqlConnection的一次性對象,並依靠調用者來處理(我不推薦這樣做),或者您可以將數據從DataReader復制到自定義對象數組(如ORM系統), DataTable對象或某種其他類型的對象中。 第二種方法是可取的,因為它會盡快捕獲數據,然后釋放連接以供其他請求使用。 第一種方法僅在返回的數據太多而無法合理地保存在內存中的情況下使用。 即使在這種情況下,傳遞某種處理委托並對該函數中的每一行進行處理也可能是更好的設計。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM