我們在ASP.NET應用程序中使用SignalR和js + HTML5 Web客戶端。由於需要支持羣集配置,我們還使用MS SQL Server 2008作爲SignalR的backplane。SignalR-client在短時間內發送大量請求
最近我們遇到了客戶服務器上的問題。
System.Data.Entity.Core.EntityException: The underlying provider failed on Open. ---> System.InvalidOperationException: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
我們已經分析了前一段時間的IIS日誌,發現如下:
30分鐘,服務器我們的應用程序沒有爲請求隨着該消息在錯誤日誌響應大約一個小時收到來自同一個IP地址,並使用相同的connectionToken 724103個請求:
2015-12-28 08:18:57 10.162.4.141 POST /signalr/poll transport=longPolling&clientProtocol=1.5&connectionToken=GSUZGb0jOI3xAoMLdfDwCbjxekvIShkOXOSpg9CjpNZ1Oi4FtMEF%2BiTgf4R1lXgULv6XuQO%2F4S3wQYcfl8tj5yI0b%2Bg2%2B1KSwv0d%2FZifAbEzxa4rp28S4EHZJiMAH7A5&connectionData=%5B%7B%22name%22%3A%22messenger%22%7D%5D&orgid=1 80 - 10.162.64.142 Mozilla/5.0+(Windows+NT+6.1;+WOW64;+rv:43.0)+Gecko/20100101+Firefox/43.0 (page url - skipped) 200 0 0 15
三個星期前,也有類似情況。我們在具有相同connectionToken的IIS日誌中發現70,000個請求,時間稍短一些。
我們不知道它是由SignalR,網絡,客戶端瀏覽器還是其他引起的。 這些事件的原因是什麼?這怎麼可以避免?
UPD1: 我們的應用程序在Intranet上運行。我們找到了這兩個用戶,並要求客戶檢查他們的電腦,但沒有發現任何可疑的東西。我們不能完全排除攻擊的可能性,但請求來自普通員工的電腦。
UPD2: 我們需要找到客戶的這種行爲的原因。 或者,有沒有辦法限制服務器端每個用戶每秒的請求數量?
謝謝您的回覆!我們將看看Reddis。也許我們應該將SignalR的底板移動到一個單獨的數據庫中。 但是在日常生活中,我們對SignalR持續了六個月沒有問題。我試圖找出這些事故的原因。 – Digger2000
我真的不能說這個問題實際上是在數據庫連接泄漏。我們的代碼中沒有關閉連接,但我無法對SignalR軟件包進行任何說明。 但每個用戶每秒400個請求 - 無論如何這顯然不正常。所以我會留下這個問題,因爲我們需要找到客戶這種行爲的原因。 – Digger2000