मैं बिलाव में एक कनेक्शन पूल C3P0 उपयोग कर रहा हूँ, और मैं बहुत चिंताजनक त्रुटियों दिखाई दे रही है:सी 3 पी 0 स्पष्ट डेडलॉक जब धागे सभी खाली हैं?
2010-09-16 13:25:00,160 [Timer-0] WARN com.mchange.v2.async.ThreadPoolAsynchronousRunner - com[email protected]43502400 -- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!
2010-09-16 13:25:01,407 [Timer-0] WARN com.mchange.v2.async.ThreadPoolAsynchronousRunner - com[email protected]43502400 -- APPARENT DEADLOCK!!! Complete Status:
Managed Threads: 10
Active Threads: 0
Active Tasks:
Pending Tasks:
com.mchange.[email protected]6e4151a7
Pool thread stack traces:
Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#6,5,main]
java.lang.Object.wait(Native Method)
com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:534)
Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2,5,main]
java.lang.Object.wait(Native Method)
com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:534)
Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1,5,main]
java.lang.Object.wait(Native Method)
com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:534)
Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0,5,main]
java.lang.Object.wait(Native Method)
com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:534)
Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#5,5,main]
java.lang.Object.wait(Native Method)
com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:534)
Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#4,5,main]
java.lang.Object.wait(Native Method)
... many more, exact same stack trace
लाइन 534 है:
while (true) {
Runnable myTask;
synchronized (ThreadPoolAsynchronousRunner.this) {
while (!should_stop && pendingTasks.size() == 0)
ThreadPoolAsynchronousRunner.this.wait(POLL_FOR_STOP_INTERVAL); // <- here
if (should_stop) ...
ऐसा लगता है कि बहुत ज्यादा की तरह सभी धागे हैं बेकार। वे काम की प्रतीक्षा कर रहे हैं। 0 सक्रिय धागे, और पूरा करने के लिए केवल 1 कार्य। क्या गलत हो रहा है पर कोई संकेत?
ds.setUser(userName);
ds.setPassword(password);
ds.setMaxPoolSize(16);
ds.setMaxConnectionAge(1800);
ds.setAcquireRetryAttempts(4);
ds.setMaxIdleTime(900);
ds.setNumHelperThreads(10);
ds.setCheckoutTimeout(1000);
क्या आप अपनी समस्या का समाधान करने में सक्षम थे? (मुझे पता है कि यह बहुत लंबा समय रहा है) – Ittai
@Ittai: नहीं, लेकिन अंत में यह चला गया। कोई संकेत नहीं कि यह वास्तव में क्या तय करता है :-( –