1. 程式人生 > >出現java.util.concurrent.RejectedExecutionException或者Thread pool exhausted怎麼辦?

出現java.util.concurrent.RejectedExecutionException或者Thread pool exhausted怎麼辦?

RejectedExecutionException表示執行緒池已經達到最大值,並且沒有空閒連,拒絕執行了一些任務。
Thread pool exhausted通常是min和max不一樣大時,表示當前已建立的連線用完,進行了一次擴充,建立了新執行緒,但不影響執行。
原因可能是連線池不夠用,請調整dubbo.properites中的:

// 設成一樣大,減少執行緒池收縮開銷 dubbo.service.min.thread.pool.size=200 dubbo.service.max.thread.pool.size=200

配置項說明請參見:配置參考手冊
如果執行緒池已經有200,還不夠,通常是業務處理佔用執行緒時間過長,
需優化業務,可通過執行:
jstack 程序號 > jstack.txt
分析當前大多數執行緒都在幹什麼,從而分析出哪個地方是瓶頸,
比如,如果大部分執行緒都在處理SQL,可能是資料庫連線不夠,或資料來源配置錯誤,或SQL沒走索引等。