2013-02-28 51 views
0

我有一個守護進程,它大量使用後端PostgreSQL數據庫。使用netstat我可以看到在ESTABLISHED中打開的數據庫的網絡連接穩步增加。到DB的網絡連接沒有關閉

內存轉儲顯示大量java.lang.ref.Finalizer。此外,線程轉儲顯示所有的線程:

"pool-1-thread-6" prio=10 tid=0x0000000000e4d800 nid=0x10eb waiting on condition  [0x00007f3736c5b000] 
java.lang.Thread.State: WAITING (parking) 
    at sun.misc.Unsafe.park(Native Method) 
    - parking to wait for <0x00000000c5524bf8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) 
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186) 
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043) 
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442) 
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:722) 

我懷疑這是因爲我使用的是固定的線程池的Executor服務,並且這些線程顯示執行人試圖得出結論,有一個資源數據庫開放線程。

這裏就是我呼籲我的各種DB資源的緊密:

InitialContext ctx = null; 
    Connection conn = null; 
    PreparedStatement ps = null; 
    ResultSet rs = null; 

      ... 

    } finally { 
     try { 
      if (rs != null) { 
       rs.close(); 
      } 
     } catch (SQLException e) { 
      Notification n = new Notification(this,e); 
      n.log(); 
     } 
     try { 
      if (ps != null) { 
       ps.close(); 
      } 
     } catch (SQLException e) { 
      Notification n = new Notification(this,e); 
      n.log(); 
     } 
     try { 
      if (conn != null) { 
       conn.close(); 
      } 
     } catch (SQLException e) { 
      Notification n = new Notification(this,e); 
      n.log(); 
     } 
     try { 
      if (ctx != null) { 
       ctx.close(); 
      } 
     } catch (NamingException e) { 
      Notification n = new Notification(this,e); 
      n.log(); 
     } 
    } 

我這個花了很多時間總額,但無論我做什麼,我似乎無法拉刺出這個代碼。

如果可以,請協助。

+0

結束了在一些代碼完全等和完全忘記部分發現問題。感謝壽。 – Lurk21 2013-03-03 21:55:33

回答