經過昨天的再次日志的詳細記錄,把線程處理中的請求包記錄下來,發現有比較大的共性,那就是出問題的請求都是用戶登錄的請求,后臺仔細檢查這個請求的處理過程,發現有一個大問題在里面:
1。應用程序在特定的配置下,會記錄下每個用戶的登錄信息(不只是當前用戶,而是登錄過的所有用戶)
2.在新用戶登錄的時候,會檢查1中記錄的所有用戶信息的狀態
這樣就造成一個大問題了,隨著用戶的不斷登錄登出,程序中積累的用戶信息越來越多,而如果這時候同時有大量用戶登錄,每次登陸的時候都去循環檢查所有用戶信息,這樣需要做的工作就巨大無比了。
現在的改進是:
1.改每次用戶登錄檢查為每隔30秒循環檢查
2.清理不需要的用戶信息,避免出現保存的用戶信息量過大。
3.使用線程安全的map對象做數據保存
結果:
今日的用戶數量和前幾天差不多,高峰的時候也是平均并發3000多,一整天沒有出現任何問題。基本確認就是該問題導致的。