【问题标题】:Hazelcast Out of MemoryHazelcast 内存不足
【发布时间】:2017-08-10 12:58:26
【问题描述】:

我们有一个 Java 应用程序,它每分钟处理 10 万个包。这些包包括用户操作细节和一个用户操作。一个操作可以有 3 到 14 个包。所有收到的包都包含该操作的唯一数据,不幸的是该操作没有 ID。因此,我们使用用户 ID 和操作日期来合并属于同一操作的包。我们向我们保证,我们将在最多 15 分钟内收到用户操作的所有包裹。因此,为了在持久化之前合并所有包,我们将所有收到的包缓存在 Hazelcast 上,并在收到 OPSTART 或 OPEND 包时插入包。包裹在 20 分钟后到期。但是运行 1 小时左右后,Hazelcast 堆空间超过 70%。

c.h.internal.diagnostics.HealthMonitor   : [192.168.2.42]:5701 [dev] [3.7.5] processors=4, physical.memory.total=15.7G, physical.memory.free=6.1G, swap.space.total=2.0G, swap.space.free=2.0G, heap.memory.used=3.1G, heap.memory.free=267.1M, heap.memory.total=3.3G, heap.memory.max=3.5G, heap.memory.used/total=92.15%, heap.memory.used/max=88.02%, minor.gc.count=71, minor.gc.time=4628ms, major.gc.count=10, major.gc.time=7186ms, load.process=0.00%, load.system=0.01%, load.systemAverage=0.00%, thread.count=502, thread.peakCount=502, cluster.timeDiff=-121091, event.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.operations.size=0, executor.q.priorityOperation.size=0, operations.completed.count=4722977, executor.q.mapLoad.size=0, executor.q.mapLoadAllKeys.size=0, executor.q.cluster.size=0, executor.q.response.size=0, operations.running.count=0, operations.pending.invocations.percentage=0.00%, operations.pending.invocations.count=50, proxy.count=0, clientEndpoint.count=0, connection.active.count=1, client.connection.count=0, connection.count=1

大约 1 个半小时后,调用开始超时。

c.h.s.i.o.impl.InvocationMonitor         : [192.168.2.42]:5701 [dev] [3.7.5] Invocations:50 timeouts:0 backup-timeouts:1

在开始 2-3 小时后,Hazelcast 抛出内存不足异常并且部署终止。

4GB 内存应该足够存储已缓存的数据。我们找不到导致 Hazelcast 抛出内存不足异常的原因。可能是什么原因?我们可以做些什么来理解这个问题?

【问题讨论】:

  • 如果您说 4GB 就足够了,您是如何计算需求的?你看过一个头部垃圾场了吗?
  • 听起来“过期”进程并没有驱逐包。那个,或者其他类型的内存泄漏。

标签: java caching hazelcast hazelcast-imap


【解决方案1】:

确定 OOME 原因的最佳方法是进行堆转储并对其进行分析,然后查看内存是如何保留的。可能它将是大量的字节数组。如果您检查对这些字节数组的传入引用并聚合它们(jprofiler 对此有很好的支持),则很容易确定保留内存的类链。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-15
    • 2011-05-21
    • 1970-01-01
    • 2021-12-20
    • 2021-10-29
    相关资源
    最近更新 更多