程式碼測試本地無誤,於是放到外網伺服器測試,出現了這樣的錯誤
com.mchange.v2.async.ThreadPoolAsynchronousRunner -466510 78 [Timer-18] WARN com.mchange.v2.async.ThreadPoolAsynchronousRunner - com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@1c17bd4 -- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!
看到這個頭都大了,怎麼辦呢?為什麼出現這樣的情況?
我的答案是:
#因為資料庫的連接數是有限的,每次應用啟動C3p0都會佔用資料庫的連線來填入C3p0的連線池,而當資料庫的資源被佔光時就會因為無法取得共用資源而報死鎖。
更改對應設定檔裡面的最大連接數和初始化連接數:
未改前:
<property name="maxPoolSize" value="100" /> <property name="initialPoolSize" value="2" />
已修改之後:
<property name="maxPoolSize" value="1" /> <property name="initialPoolSize" value="1" />
重新部署運行,ok!
#以上是c3p0所造成的死鎖如何解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!