2013-09-25 7 views
0

서버를 시작한 다음 특정 IP 및 포트에서 처음부터 응용 프로그램을 시작했습니다 (딥 서버 또는 포트가 이미 사용되지 않음). 새 스레드를 만들 수 없다는 java-lang-OutOfMemory 오류로 인해 응용 프로그램이 충돌했습니다. JVM 4G 메모리를 할당했으며 오류가 발생하지 않았습니다. 그러나 이제 클라이언트를 시작하면 다시 충돌합니다. 약 10-15 초 동안 실행되고 SocketTimeoutException과 충돌합니다. 여기에 추적H2 데이터베이스 (서버) TCP 연결 시간 초과 및 연결 풀링

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 (기반 IDE를 일식)에서 같은 클라이언트를 실행할 때, 그것은 추락 didnt한다. 클라이언트를 실행하는 동안 추가해야하는 설정이나 플래그는 무엇입니까?

업데이트 : 연결 문자열에 AUTORECONNECT = TRUE를 추가하여 해결되었습니다. 자세한 내용은 여기, h2database.com/html/features.html#auto_reconnect

하지만 지금은 다른 TCP 클라이언트가 연결할 수 있도록 서버 끝에서 연결 풀을 만드는 데 관심이 있습니다. 서버는 다시 연결하는 클라이언트가 아닌 연결 풀에서 클라이언트를 서비스해야합니다. 어떻게 성취 될 수 있습니까?

답변

1

개방 시도하십시오 C:\Users\Superuser\db.lock.db. 이 데이터베이스가 이미 실행중인 경우 IP 및 포트가 표시됩니다. 그런 다음 콘솔에 명령 netstat -ano을 입력하십시오. 모든 프로세스가 표시됩니다. .db 파일에서 찾은 IP 및 포트를 보유하고있는 proccess의 PID를 찾으십시오. 작업 관리자를 사용하거나 콘솔의 명령을 사용하여이 프로세스를 종료 할 수 있습니다.

다른 방법 : 모든 구성을 확인하십시오. 다른 설정에서 다른 IP를 사용할 수 있습니다. 동기화하십시오