asp服务端采用的是3.23版本,客户端是aerospike-client 4.x版本。
客户端有时会出现这样的报错内容:
com.aerospike.client.AerospikeException: java.io.EOFException
at com.aerospike.client.command.SyncCommand.execute(SyncCommand.java:139)
at com.aerospike.client.AerospikeClient.execute(AerospikeClient.java:1579)
at cn.tongdun.shenwei.core.storage.AerospikeStorage.defaultCall(AerospikeStorage.java:419)
at cn.tongdun.shenwei.core.callable.DefaultRunnable.call(DefaultRunnable.java:76)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)
Caused by: java.io.EOFException: null
at com.aerospike.client.cluster.Connection.readFully(Connection.java:239)
at com.aerospike.client.command.ReadCommand.parseResult(ReadCommand.java:56)
at com.aerospike.client.command.SyncCommand.execute(SyncCommand.java:84)
... 7 common frames omitted
这是因为在asp版本5.1之前,服务端proto-fd-idle-ms默认值是60000(60s)。这个参数表示客户端与服务器之间的连接最长空闲时间,超过了这个时间,链接在服务端会被关闭,注意,这个是服务端的配置。而客户端的链接默认空闲时间配置是55s,也就是都采用默认值的情况下,意味着永远不会获取空闲连接(客户端idle time < 服务端idle time即可)
出现这个问题的原因在于我们客户端配置的socket idle时间是500,客户端拿了一个在服务端过期看来过期的链接,导致I/O异常