最近用上了sonarqute 對項目進行了掃描,接納了針對
new SecureRandom()
變更為SecureRandom.getInstanceStrong()
的建議,結果深坑似海~
事發
一個內部應用項目, 需要短信進行驗證登錄,需要生成隨機驗證碼,但是發版本后,請求長時間不回執,最終502
504
, 無異常。
排查過程
查看日志,因為沒加上 requestid/traceid
只能通過thread
按照時間端查詢,經過查詢,基本都是一個狀態
2021-03-09 11:01:26.341 [http-nio-8000-exec-1] DEBUG org.springframework.web.servlet.DispatcherServlet - POST "/xxxx", data={}
針對 thread http-nio-8000-exec-1
查抄,后面就再也沒出現這一線程
真的是 百思不得其解 , 於是 開始瘋狂加 log
日志,在測試環境中進行測試
注意: 重點來了,wsl 環境中模仿了
centos
, 竟然順利執行了!
也就是說 在測試環境中,並沒發現任何問題!
於是回想起來,本次版本更新對此方法 最大的操作, 就是將 驗證碼這個隨機數更新了,鐵定就是它的問題。
於是開始 度娘 起來 ,然后就知道了 這個坑爹的玩意,不同的系統下,出現的問題不一樣
具體的問題分析 可以參考 這篇關於SecureRandom.getInstanceStrong()引發的線程阻塞問題分析