2013-05-06 25 views
1

可以s.b.告訴我這是什麼原因:玻璃魚v3塊突然並用盡最大線程

服務器沒有做任何事情了:

server.network.http-listener-1.thread-pool.currentthreadcount-count = 500 
server.network.http-listener-1.thread-pool.currentthreadsbusy-count = 500 

地塊的中日是在日誌中:

[#|2013-05-06T13:06:07.917+0200|WARNING|glassfish3.0.1|com.sun.grizzly.config.GrizzlyServiceListener|_ThreadID=16;_ThreadName=Thread-1;|Interrupting idle Thread: http-thread-pool-8083-(498)|#] 
[#|2013-05-06T13:06:09.917+0200|WARNING|glassfish3.0.1|com.sun.grizzly.config.GrizzlyServiceListener|_ThreadID=16;_ThreadName=Thread-1;|Interrupting idle Thread: http-thread-pool-8083-(499)|#] 
[#|2013-05-06T13:06:10.917+0200|WARNING|glassfish3.0.1|com.sun.grizzly.config.GrizzlyServiceListener|_ThreadID=16;_ThreadName=Thread-1;|Interrupting idle Thread: http-thread-pool-8083-(500)|#] 

正常行爲:

server.network.http-listener-1.thread-pool.currentthreadcount-count = 427 
server.network.http-listener-1.thread-pool.currentthreadsbusy-count = 8 
server.network.http-listener-1.connection-queue.countqueued1minuteaverage-count = 184 
server.network.http-listener-1.connection-queue.countqueued5minutesaverage-count = 3014 
server.network.http-listener-1.connection-queue.countqueued15minutesaverage-count = 10058 
+0

您是否正確關閉連接? – 2013-05-06 11:38:50

+0

不確定。你可以給我一個例子嗎。我使用jaxrs進行通信。而PHP作爲客戶端查詢的Glassfish服務器。你是指從客戶端還是服務器端? – 2013-05-06 11:39:48

回答

0

如果您的連接用完了,這可能表示您的連接在使用後未關閉。很難給出一個沒有看到實施打開/關閉數據庫連接的例子。但通常你要確保你關閉一個finally從句連接,我會在下面的例子:

try { 
    //Some logic that reads/writes to the database 

}catch (SQLException e) { //Rollback in case something goes wrong 
    try { 
    System.out.println("Rolling back current db transaction"); 
    conn.rollback(); 
    } catch (SQLException e1) { 
     System.out.println(e1); 
      } 
}finally{ //Close the connection 
    conn.close(); 
    System.out.println("DB connection is closed"); 
} 

因此,如果讀/寫失敗或沒有數據庫連接將被關閉無關。如果您無法正確關閉這些連接,則這些連接將保持打開狀態(或根據您的設置超時),最終用盡連接

+0

是不是關於http-thread-pool連接而不是數據庫連接?數據庫連接從glassfish處理。我使用JPA EclipseLink。這都是容器管理。 – 2013-05-06 11:57:50

+0

調試這樣的錯誤總是很耗時間。線程池說明可以同時處理多少個請求,因爲連接池說明爲了加快打開新連接,需要保留多少連接以保存在內存中。當你得到這樣的錯誤時,可能是因爲你打開了使用線程池中的線程並保持佔用狀態的連接,或者可能是由於其他一些使用線程的錯誤導致的 – 2013-05-06 12:09:18

+0

是的,針在乾草堆中。 :-( – 2013-05-06 12:12:45