java.net.NoRouteToHostException: 无法指定被请求的地址
报错日志:
2021-08-09 14:13:42.083[WARN ][C3P0PooledConnectionPoolManager[identityToken->z8kfltajbiyq6d98bpde|6fa82685]-HelperThread-#0][c.m.v.r.BasicResourcePool:214] com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@132433b1 -- Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (30). Last acquisition attempt exception:
com.thunisoft.ArteryBase.util.PSQLException: The connection attempt failed.
at com.thunisoft.ArteryBase.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:240)
at com.thunisoft.ArteryBase.core.ConnectionFactory.openConnection(ConnectionFactory.java:64)
at com.thunisoft.ArteryBase.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:143)
at com.thunisoft.ArteryBase.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:29)
at com.thunisoft.ArteryBase.jdbc3g.AbstractJdbc3gConnection.<init>(AbstractJdbc3gConnection.java:21)
at com.thunisoft.ArteryBase.jdbc4.AbstractJdbc4Connection.<init>(AbstractJdbc4Connection.java:38)
at com.thunisoft.ArteryBase.jdbc4.Jdbc4Connection.<init>(Jdbc4Connection.java:24)
at com.thunisoft.ArteryBase.Driver.makeConnection(Driver.java:412)
at com.thunisoft.ArteryBase.Driver.connect(Driver.java:280)
at net.sf.log4jdbc.sql.jdbcapi.DriverSpy.connect(DriverSpy.java:399)
at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:175)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:220)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:206)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:203)
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1138)
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(BasicResourcePool.java:1125)
at com.mchange.v2.resourcepool.BasicResourcePool.access$700(BasicResourcePool.java:44)
at com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(BasicResourcePool.java:1870)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:696)
Caused by: java.net.NoRouteToHostException: 无法指定被请求的地址
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at com.thunisoft.ArteryBase.core.PGStream.<init>(PGStream.java:61)
at com.thunisoft.ArteryBase.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:110)
... 18 common frames omitted
可能解决方法1--调低time_wait状态端口等待时间:
- 调低端口释放后的等待时间,默认为60s,修改为15~30s
sysctl -w net.ipv4.tcp_fin_timeout=30 - 修改tcp/ip协议配置, 通过配置/proc/sys/net/ipv4/tcp_tw_resue, 默认为0,修改为1,释放TIME_WAIT端口给新连接使用
sysctl -w net.ipv4.tcp_timestamps=1 - 修改tcp/ip协议配置,快速回收socket资源,默认为0,修改为1
sysctl -w net.ipv4.tcp_tw_recycle=1
可能解决办法2–增加可用端口:
CCH:~ # sysctl -a |grep port_range
net.ipv4.ip_local_port_range = 50000 65000 -----意味着50000~65000端口可用
修改参数:
$ vi /etc/sysctl.conf
net.ipv4.ip_local_port_range = 10000 65000 -----意味着10000~65000端口可用
改完后,执行命令“sysctl -p”使参数生效,不需要reboot。