這個貼我在SQL Server 疑難雜癥已經發了一遍了,請版主允許我也在這里發一次,因為這問題既是資料庫的問題,同時也是ASP.NET的問題,我都不知道發到哪好了,為了增加高手看到的幾率,只能也在這里發一遍了.
最近做了一個簡單的查詢網頁,但網頁永久之后就會出現這個標題的錯誤而無法訪問了
詳細錯誤資訊如下
在與 SQL Server 建立連接時出現與網路相關的或特定于實體的錯誤。未找到或無法訪問服務器。請驗證實體名稱是否正確并且 SQL Server 已配置為允許遠程連接。
(provider: TCP Provider, error: 0 - 由于系統緩沖區空間不足或佇列已滿,不能執行套接字上的操作。)
在 System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool pool, String accessToken, Boolean applyTransientFaultHandling)
在 System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
在 System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions)
在 System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
在 System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
在 System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
在 System.Data.ProviderBase.DbConnectionIntern
我百度過都是說由于連接沒有關閉造成的,但我查過代碼確認每次資料查詢后都已經顯式呼叫close關閉連接了,而且查看服務器的連接串列(netstat 命令)也沒有看到未關閉的連接,而且只要出現這個錯誤,所有程式都無法再上網了,QQ,瀏覽器都無法再打開新的連接,但其他電腦是可以連接到這個電腦的資料庫和網頁的(沒有查詢資料庫的頁面還可以訪問).最后只能重啟SQL Server 才可以(重啟IIS沒用,必須重啟SQL Server)
已經使用了連接池,而且錯誤提示也不是提示連接池滿的錯誤.百度上能找到類似的問題的解決辦法我都試過了(修改注冊表增加埠數等)
我的網頁很簡單,VB.NET寫的一個簡單查詢頁面,回傳一個表格,主要代碼如下:
Dim conn As SqlConnection
Try
conn = New SqlConnection("Server=服務器地址;uid=用戶名;pwd=密碼;database=資料庫名;Connect Timeout=60")
conn.Open()
'''利用conn查詢資料庫的代碼和顯示表格內容的代碼
Catch ex As Exception
'''錯誤提示代碼
Finally
If Not conn Is Nothing AndAlso conn.State <> ConnectionState.Closed Then
conn.Close()
conn.Dispose()
conn = Nothing
End If
End Try
有哪個大咖幫幫忙分析一下或者有遇到類似錯誤知道問題所在的嗎???
uj5u.com熱心網友回復:
看錯誤像是因為連接過多并沒有釋放,新的連接資源不夠導致的,確定是否有其他應用程式訪問這個資料庫,并沒有釋放資源uj5u.com熱心網友回復:
netstat還要查看那些本地埠占用,包括那些處于CLOSE_WAIT狀態的已斷開連接。如果你看到大量的CLOSE_WAIT,可能暗示本地socket資源被耗盡。...
TCP 192.168.1.111:2692 84.81.41.129:443 CLOSE_WAIT 564
TCP 192.168.1.111:2693 84.81.41.129:443 CLOSE_WAIT 564
TCP 192.168.1.111:2694 17.12.237.29:80 CLOSE_WAIT 564
TCP 192.168.1.111:2695 84.81.41.50:80 CLOSE_WAIT 564
TCP 192.168.1.111:2696 84.81.41.50:80 CLOSE_WAIT 564
TCP 192.168.1.111:2697 84.81.41.50:80 CLOSE_WAIT 564
TCP 192.168.1.111:2698 84.81.41.50:80 CLOSE_WAIT 564
TCP 192.168.1.111:2699 84.81.41.50:80 CLOSE_WAIT 564
TCP 192.168.1.111:2700 84.81.41.50:80 CLOSE_WAIT 564
...
CLOSE_WAIT本意是保護那些剛剛斷開的埠,因為馬上復用那個埠,有被前一個連接的遲到資料污染的風險。
但是,CLOSE_WAIT要等2分鐘或4分鐘,取決于電腦設定,才能回收那個占用埠。
如果有某個應用,在短時間內建立很多的短連接,即使這些短連接都被關閉了,還是有可能導致本地埠資源用盡,進而導致“由于系統緩沖區空間不足或佇列已滿,不能執行套接字上的操作”的錯誤。
另外,查查你服務器的作業系統。一些舊系統,比如Server 2008等,默認的臨時TCP埠的最大數量只有5000。
如果是該種情形,可以改注冊表調高。
https://support.microsoft.com/zh-cn/help/196271/when-you-try-to-connect-from-tcp-ports-greater-than-5000-you-receive-t
uj5u.com熱心網友回復:
沒有其他應用連接資料庫了,就一個網頁和一個ERP,ERP沒有問題,其他電腦還可以正常登陸(在服務器就不能登錄了),因為ERP客戶端是直接連接SQL Server的
網頁就不管在哪里都不能登錄了,因為網頁是在服務器連接資料庫的,服務器出現這個錯誤后不管什么程式都不能再新建網路連接了,包括QQ,瀏覽器都不能再打開新連接.
uj5u.com熱心網友回復:
這個錯誤就是資料庫的鏈接資源不夠了,肯定是被占用的連接資源沒有被釋放。鏈接資源不夠,其他程式必然也鏈接不進來的
uj5u.com熱心網友回復:
看錯誤像是因為連接過多并沒有釋放,新的連接資源不夠導致的,確定是否有其他應用程式訪問這個資料庫,并沒有釋放資源
沒有其他應用連接資料庫了,就一個網頁和一個ERP,ERP沒有問題,其他電腦還可以正常登陸(在服務器就不能登錄了),因為ERP客戶端是直接連接SQL Server的
網頁就不管在哪里都不能登錄了,因為網頁是在服務器連接資料庫的,服務器出現這個錯誤后不管什么程式都不能再新建網路連接了,包括QQ,瀏覽器都不能再打開新連接.
查一下你電腦的埠,看看是哪個程式占用了那么多的埠資源
uj5u.com熱心網友回復:
看錯誤像是因為連接過多并沒有釋放,新的連接資源不夠導致的,確定是否有其他應用程式訪問這個資料庫,并沒有釋放資源
沒有其他應用連接資料庫了,就一個網頁和一個ERP,ERP沒有問題,其他電腦還可以正常登陸(在服務器就不能登錄了),因為ERP客戶端是直接連接SQL Server的
網頁就不管在哪里都不能登錄了,因為網頁是在服務器連接資料庫的,服務器出現這個錯誤后不管什么程式都不能再新建網路連接了,包括QQ,瀏覽器都不能再打開新連接.
這個錯誤就是資料庫的鏈接資源不夠了,肯定是被占用的連接資源沒有被釋放。鏈接資源不夠,其他程式必然也鏈接不進來的
也可能是你本地的電腦埠被占用完了
uj5u.com熱心網友回復:
netstat還要查看那些本地埠占用,包括那些處于CLOSE_WAIT狀態的已斷開連接。如果你看到大量的CLOSE_WAIT,可能暗示本地socket資源被耗盡。
...
TCP 192.168.1.111:2692 84.81.41.129:443 CLOSE_WAIT 564
TCP 192.168.1.111:2693 84.81.41.129:443 CLOSE_WAIT 564
TCP 192.168.1.111:2694 17.12.237.29:80 CLOSE_WAIT 564
TCP 192.168.1.111:2695 84.81.41.50:80 CLOSE_WAIT 564
TCP 192.168.1.111:2696 84.81.41.50:80 CLOSE_WAIT 564
TCP 192.168.1.111:2697 84.81.41.50:80 CLOSE_WAIT 564
TCP 192.168.1.111:2698 84.81.41.50:80 CLOSE_WAIT 564
TCP 192.168.1.111:2699 84.81.41.50:80 CLOSE_WAIT 564
TCP 192.168.1.111:2700 84.81.41.50:80 CLOSE_WAIT 564
...
CLOSE_WAIT本意是保護那些剛剛斷開的埠,因為馬上復用那個埠,有被前一個連接的遲到資料污染的風險。
但是,CLOSE_WAIT要等2分鐘或4分鐘,取決于電腦設定,才能回收那個占用埠。
如果有某個應用,在短時間內建立很多的短連接,即使這些短連接都被關閉了,還是有可能導致本地埠資源用盡,進而導致“由于系統緩沖區空間不足或佇列已滿,不能執行套接字上的操作”的錯誤。
另外,查查你服務器的作業系統。一些舊系統,比如Server 2008等,默認的臨時TCP埠的最大數量只有5000。
如果是該種情形,可以改注冊表調高。
https://support.microsoft.com/zh-cn/help/196271/when-you-try-to-connect-from-tcp-ports-greater-than-5000-you-receive-t
這個我發帖已經講了,netstat不存在大量未關閉的連接和大量CLOSE_WAIT狀態的連接,連接數加起來也就是幾十個
百度能找到的解決方法我都試過了,包括你講的增加埠連接數,我發文中也講了.
uj5u.com熱心網友回復:
我也碰上過, 行程里有個n開頭 還是S 開頭的行程, 結束了 這個問題就沒了uj5u.com熱心網友回復:
我也碰上過, 行程里有個n開頭 還是S 開頭的行程, 結束了 這個問題就沒了
能具體點嗎?這樣的行程很多啊
uj5u.com熱心網友回復:
我也碰上過, 行程里有個n開頭 還是S 開頭的行程, 結束了 這個問題就沒了
能具體點嗎?這樣的行程很多啊
具體全名沒記住啊, 就出現過3次, 以后都沒出現過了
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/14574.html
標籤:ASP.NET
