【问题标题】:memory usage of Ignite ServerIgnite 服务器的内存使用情况
【发布时间】:2016-12-24 09:28:21
【问题描述】:

我的 ignite 服务器运行在 64G 内存的机器上。总缓存占用大约 20G 内存(堆外内存,我在盯着 ignitevisorcmd.sh 后使用 cache -a 命令获取此信息),但是当我运行top命令查看内存使用情况,貌似这个进程占用了50G内存,请问怎么会这样?

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 10001 root 20 0 63.1G 51G 15m S 70% 80% 400:57.38 java

【问题讨论】:

  • 有人可以看看吗?我想知道如何知道 ignite 服务器除了缓存之外需要多少内存。
  • 你的堆外配置是什么,堆的使用是什么?
  • 感谢@Mitya 的回复。我只使用堆外。配置如下:cacheConfig.setCacheMode(CacheMode.PARTITIONED); cacheConfig.setBackups(0); cacheConfig.setMemoryMode(CacheMemoryMode.OFFHEAP_TIERED); cacheConfig.setOffHeapMaxMemory(0); cacheConfig.setOffHeapMaxMemory(48*1024*1024*1024);
  • Tom,你能检查一下堆的大小并分析堆转储吗?例如,使用 VisualVM。如果您有一些处理逻辑,请记住任何对堆外条目的访问都会将其加载到堆中。还有一个 bug 在 1.7 版本中修复。
  • 感谢@MityaXMitya 的回复。我正在使用 Ignite 1.8。根据您的评论提出一个快速问题:any access to offheap entry will load it to heap。如果我的数据在堆外是20G,那么当我对缓存执行sql select *时,所有条目都会被带到堆上,这也将占用大约20G的堆内存?

标签: memory-management ignite


【解决方案1】:

差值由 JVM 消耗。这可能是很多东西 - Ignite 提供的开销(任何 Java 应用程序都使用堆内存,Ignite 只将实际数据移动到堆外),数据处理产生的对象(例如查询),最终将由 GC 收集的垃圾,等等。为了更深入地了解,您应该进行堆转储并分析什么正在消耗您的堆内存。

【讨论】:

  • 谢谢@Valentin,我会做更多调查。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多