H2数据库(服务器)TCP连接超时&连接池

时间:2013-09-25 15:36:08

标签: tcp jvm h2 connection-timeout

我启动了服务器,然后从头开始在某个IP和端口上应用程序(没有已经使用过的dulpicate服务器或端口)。由于java-lang-OutOfMemory错误导致应用程序崩溃,表示无法创建新线程。我分配了JVM 4G内存,现在该错误是无声的。但是,现在开始客户端再次崩溃。它运行大约10-15秒并且使用SocketTimeoutException崩溃。这是跟踪

 org.h2.jdbc.JdbcSQLException: Connection is broken: "java.net.SocketTimeoutException: connect timed out: MYIPADDRESS" [90067-172]
   at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)
   at org.h2.message.DbException.get(DbException.java:158)
   at org.h2.engine.SessionRemote.connectServer(SessionRemote.java:407)
   at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:295)
   at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:105)
   at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:90)
   at org.h2.Driver.connect(Driver.java:73)
   at java.sql.DriverManager.getConnection(DriverManager.java:579)
   at java.sql.DriverManager.getConnection(DriverManager.java:221)
   at com.org.tseries.simulator.IPEmailSeriesTestDriver.shootH2(IPEmailSeriesTestDriver.java:201)
   at com.org.tseries.simulator.IPEmailSeriesTestDriver.processSimulator(IPEmailSeriesTestDriver.java:160)
   at com.org.tseries.simulator.IPEmailSeriesTestDriver.main(IPEmailSeriesTestDriver.java:98)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   at java.lang.reflect.Method.invoke(Method.java:601)
   at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)

Caused by: java.net.SocketTimeoutException: connect timed out
   at java.net.PlainSocketImpl.socketConnect(Native Method)
   at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
   at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
   at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
   at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
   at java.net.Socket.connect(Socket.java:579)
   at org.h2.util.NetUtils.createSocket(NetUtils.java:119)
   at org.h2.util.NetUtils.createSocket(NetUtils.java:100)
   at org.h2.engine.SessionRemote.initTransfer(SessionRemote.java:95)
   at org.h2.engine.SessionRemote.connectServer(SessionRemote.java:403)
... 14 more

当我从终端运行客户端时崩溃但是当我从STS(基于eclipse的IDE)运行相同的客户端时,它没有崩溃。运行客户端时需要添加的任何设置或标志?

更新:通过在连接字符串中追加AUTORECONNECT = TRUE来解决此问题。更多详细信息,请访问h2database.com/html/features.html#auto_reconnect

但是现在,我有兴趣在服务器端创建一个允许不同TCP客户端连接的连接池。服务器应从连接池为客户端服务,而不是再次重新连接客户端。如何实现?

1 个答案:

答案 0 :(得分:1)

尝试打开C:\Users\Superuser\db.lock.db。如果此数据库已在运行,您将看到IP和端口。然后在控制台类型命令netstat -ano中。它将显示所有进程。查找包含您在.db文件中找到的IP和端口的进程的PID。你可以使用任务管理器或在控制台的命令帮助下杀死这个进程。

另一种方式:检查所有配置。您可以在不同的配置中使用不同的IP。同步此