玩家被踢下線原因分析

2021-08-31 15:28:24 字數 893 閱讀 2559

一次發生在晚上9點左右,此時人數在持續上公升,突然發生玩家全部掉線,當時幾個同事都在現場,檢視資料庫狀態show processlist,發現有幾百個請求正在進行中,有幾張myisam表處於lock狀態,試圖重啟資料庫,不過非常緩慢,檢視tomcat日誌發現,玩家掉線這段時間,基本不刷什麼日誌了,之前我們將web應用的session過期時間設定成3分鐘,這段時間內如果沒有玩家訪問tomcat的話,session都將過期,因此所有玩家都被踢下線了,當時重啟了mysql,恢復正常,此時已經10點多,玩家繼續登入的不多,因此問題沒有在發生。

在之前伺服器端spring事務配置中,將事務的timeout時間設定成了無限長,此時當db有lock被阻塞的時候,tomcat的執行緒一直處於占用狀態,而此時玩家不斷有請求傳送到tomcat,使得tomcat執行緒數不斷增長,達到執行緒池的最大值,之後無法再處理玩家的請求了。之後將spring事務超時時間設定成了5s,經測試沒有大的異常,放到外網之後沒有再產生過類似問題,也可能跟人數沒有達到當時的高峰有關。

這種情況的發生,一部分是由於tomcat6採用servlet2的機制導致的,老的servlet採用了block io的方法實現,web 容器的執行緒與應用的執行緒一致,因此應用發生異常,會影響到tomcat的穩定性。而最新的servlet3.0,引入了非同步處理,servlet 執行緒不再需要一直阻塞,直到業務處理完畢才能再輸出響應,最後才結束該 servlet 執行緒。在接收到請求之後,servlet 執行緒可以將耗時的操作委派給另乙個執行緒來完成,自己在不生成響應的情況下返回至容器。針對業務處理較耗時的情況,這將大大減少伺服器資源的占用,並且提高併發處理速度。應用部分可以自己建立執行緒池,靈活地處理業務請求。

另外部分原因是mysql瓶頸導致伺服器失去響應的,是否需要有乙個統一的資料伺服器來管理與mysql的連線,這個值得考慮。

1.2.大寶,網遊伺服器架構設計.pptx

資料庫儲存資料導致被踢下線問題

問題 登入司機端後一段時間被踢下線 排查 經排查,是上傳司機聯絡歷史導致服務端返回token失效,上傳聯絡歷史的司機工號與當前司機登入的司機工號不符。除錯發現,資料庫中儲存的聯絡歷史列表對應的司機工號有多個 每次司機通話都會記錄通話 號碼以及司機工號等資訊到資料庫 原因可能有以下幾種 1 司機切換過...

單使用者登入記錄互踢下線思路

使用者登入成功生成隨機值 uuid或者雪花演算法,隨意 存在redis 假設key token user token 值 userinfojson 每次使用者登入只要在全域性 獲取token並檢視redis中是否有此token來判斷是否已登入 可以在任何地方直接獲取使用者資訊 使用者資訊發生變更記得...

mac U盤安裝系統(原系統被抹掉)

因為自己mac檔案太多了,想抹掉以前的資料,用磁碟工具一抹掉 然後你懂得 系統都沒了 u盤安裝 實戰u盤安裝蘋果系統 半小時輕鬆搞定 關於u盤重灌系統基本就是可以搞定了,當然,我這裡肯定是出現了問題才會寫部落格記憶一下 問題1 我的製作系統是os x ei caption,磁碟工具中的恢復是在編輯裡...