2013-05-06 50 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