簡體   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