繁体   English   中英

Hazelcast 存储大型 object 导致高延迟问题

[英]Hazelcast stores large object cause high latency issue

我们宁静的 web 服务使用 hazelcast 3.4.2。 我们使用 IQueue 来存储 byte[] object。 一个线程将 object 放入队列,另一个线程从队列中获取 object。 我们使用 Jmeter 进行了 50 个线程的负载测试。 当 object 很小(低于 10k)时,它运行良好,应用程序响应时间始终低于 50ms,CPU 较低。 当 object 较大时,例如 90k,响应时间将 go 到 500ms。 object为250k时,响应时间为2500ms。 同时CPU占用60%-80%。 memory 约为 60%-80%。

我们的测试服务器是 AWS m5.large:2 core 和 8G。 Tomcat分配6G memory。

我们尝试通过以下方式解决问题:

  1. 将 hazelcast 升级到 3.12。
  2. 将备份计数更改为 0。

这个问题还没有解决。

这是prod中的高延迟hazelcast健康监视器,prod服务器是8核和16G memory,tomcat分配12G memory:

2019-10-25 15:11:13.078][INFO][com.hazelcast.util.HealthMonitor] [ec1-12]:5701 [dev] [3.4.2] 处理器=8,物理.memory.total=14.7G , physical.memory.free=183.5M, swap.space.total=0, swap.space.free=0, heap.memory.used=1.8G, heap.memory.free=8.8G, heap.memory.total= 10.7G, heap.memory.max=10.7G, heap.memory.used/total=17.31%, heap.memory.used/max=17.31%, minor.gc.count=129321, minor.gc.time=2021051ms, major.gc.count=1224,major.gc.time=165825ms,load.process=80.00%,load.system=79.00%,load.systemAverage=469.00%,thread.count=153,thread.peakCount=198,事件.q.size=0, executor.q.async.size=0, executor.q.client.size=0, executor.q.query.size=0, executor.q.scheduled.size=0, executor.q .io.size=0, executor.q.system.size=0, executor.q.oper ation.size=0,executor.q.priorityOperation.size=0,executor.q.response.size=0,operations.remote.size=8,operations.running.size=2,proxy.count=8,clientEndpoint。 count=0,connection.active.count=2,client.connection.count=0,connection.count=2

此问题与 Hazelcast 无关。 您所看到的是对大型 object 进行序列化/反序列化的高延迟的典型案例。

在数据需要从一个点传输到另一个点的任何系统中,数据必须在源头序列化,通过网络传输,并且在发送存储时可能在目的地反序列化(不是您的情况,取决于配置)。 当您检索时,数据将在源处序列化(如果之前反序列化),遍历网络并在目的地反序列化。 在您的情况下,您的应用程序大部分时间都花在 ser/des 上,这从 CPU 使用率可以看出。

减少延迟的唯一方法是: 1. 使用 Hazelcast 序列化,在此处阅读 - https://docs.hazelcast.org/docs/3.12.4/manual/html-single/index.html#serialization 2. 减小object

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM