Aerospike Timeout Exception

时间:2016-07-01 23:58:59

标签: timeout cluster-computing key-value-store aerospike

我有一个应用程序,用户很多批量读取Aerospike。一段时间后,应用程序正在运行,我得到了很多这些错误:

play.api.Application$$anon$1: Execution exception[[AerospikeException: Error Code 9: Timeout]]
    at play.api.Application$class.handleError(Application.scala:296) ~[com.typesafe.play.play_2.11-2.3.7.jar:2.3.7]
    at play.api.DefaultApplication.handleError(Application.scala:402) [com.typesafe.play.play_2.11-2.3.7.jar:2.3.7]
    at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3$$anonfun$applyOrElse$4.apply(PlayDefaultUpstreamHandler.scala:320) [com.typesafe.play.play_2.11-2.3.7.jar:2.3.7]
    at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3$$anonfun$applyOrElse$4.apply(PlayDefaultUpstreamHandler.scala:320) [com.typesafe.play.play_2.11-2.3.7.jar:2.3.7]
    at scala.Option.map(Option.scala:146) [org.scala-lang.scala-library-2.11.7.jar:na]
    at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3.applyOrElse(PlayDefaultUpstreamHandler.scala:320) [com.typesafe.play.play_2.11-2.3.7.jar:2.3.7]
    at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3.applyOrElse(PlayDefaultUpstreamHandler.scala:316) [com.typesafe.play.play_2.11-2.3.7.jar:2.3.7]
    at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:344) [org.scala-lang.scala-library-2.11.7.jar:na]
    at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:343) [org.scala-lang.scala-library-2.11.7.jar:na]
    at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32) [org.scala-lang.scala-library-2.11.7.jar:na]
    at play.api.libs.iteratee.Execution$trampoline$.execute(Execution.scala:46) [com.typesafe.play.play-iteratees_2.11-2.3.7.jar:2.3.7]
    at scala.concurrent.impl.CallbackRunnable.executeWithValue(Promise.scala:40) [org.scala-lang.scala-library-2.11.7.jar:na]
    at scala.concurrent.impl.Promise$DefaultPromise.tryComplete(Promise.scala:248) [org.scala-lang.scala-library-2.11.7.jar:na]
    at scala.concurrent.Promise$class.complete(Promise.scala:55) [org.scala-lang.scala-library-2.11.7.jar:na]
    at scala.concurrent.impl.Promise$DefaultPromise.complete(Promise.scala:153) [org.scala-lang.scala-library-2.11.7.jar:na]
    at scala.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:249) [org.scala-lang.scala-library-2.11.7.jar:na]
    at scala.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:249) [org.scala-lang.scala-library-2.11.7.jar:na]
    at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32) [org.scala-lang.scala-library-2.11.7.jar:na]
    at scala.concurrent.forkjoin.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1361) [org.scala-lang.scala-library-2.11.7.jar:na]
    at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) [org.scala-lang.scala-library-2.11.7.jar:na]
    at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) [org.scala-lang.scala-library-2.11.7.jar:na]
    at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) [org.scala-lang.scala-library-2.11.7.jar:na]
    at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) [org.scala-lang.scala-library-2.11.7.jar:na]
Caused by: com.aerospike.client.AerospikeException: Error Code 9: Timeout
    at com.aerospike.client.command.MultiCommand.parseGroup(MultiCommand.java:96) ~[com.aerospike.aerospike-client-3.2.2.jar:na]
    at com.aerospike.client.command.MultiCommand.parseResult(MultiCommand.java:71) ~[com.aerospike.aerospike-client-3.2.2.jar:na]
    at com.aerospike.client.command.SyncCommand.execute(SyncCommand.java:57) ~[com.aerospike.aerospike-client-3.2.2.jar:na]
    at com.aerospike.client.command.Executor$ExecutorThread.run(Executor.java:127) ~[com.aerospike.aerospike-client-3.2.2.jar:na]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_66-internal]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[na:1.8.0_66-internal]
    at java.lang.Thread.run(Thread.java:745) ~[na:1.8.0_66-internal]

我认为它与批量读取有关,因为batch_index_timeout在每个超时异常时都会增加。我的数据库有很多大型记录(512K-1M),这些记录在这些批量获取操作中被检索。

我有一个5节点集群,它们都是2个CPU,每个3.5GB RAM。 Bellow有一个图表,显示每秒读取数下降的时刻,这正是错误开始发生的时刻。这是客户端还是服务器中的问题?两者似乎都运行正常,具有低CPU,网络和内存消耗。

enter image description here

修改1 : 经过一些测试后,我注意到当服务器有更多可用内存时,I / O级别较低。我认为这是因为操作系统磁盘缓存正在工作并且避免了在公共访问区域的磁盘操作。这可以在下图中清楚地看到:

enter image description here

  • 我有一个带SSD的节点,3.5G RAM和配置到设备的存储 的/ dev / SDB
  • 我有5个带HDD的节点,7.5G内存和存储配置为文件/data/aerospike.dat

开始时,HDD节点会增加I / O,但一段时间后它会下降并正常运行。内存很少的SDD服务器始终从磁盘读取。当我增加群集中的负载时,这会对SDD产生很大影响,但对HDD服务器的影响很小。使用此配置,不再有超时事件。

编辑2:

我启动了全新的测试环境,配备3个airospike服务器:6CPU,21GB RAM,每个200GB SSD。复制因子为2.此配置可以处理比以前的配置(目前为40000 TPS)更多的请求。但即使这个配置达到了我可以获得大量超时的程度。奇怪的是,两个服务器中只有一个在监视中出现超时错误(err_tsvc_requests_timeout变量)。另一个区别是batch_index_timeout不再发生,只有err_tsvc_requests_timeout,并且只在三个服务器之一中发生。 Bellow 3服务器的图表。有超时问题的那个是aerospike-new2。一段时间后,其他两个人已经开始使用了aerospike-new3。

enter image description here enter image description here enter image description here

0 个答案:

没有答案