Aerospike社区版内部版本3.12.0
我们有一个由32个节点组成的集群,其中一个命名空间有多个集合。我在日志中看到以下内容:
2018年9月29日15:36:21 GMT + 0530:INFO(信息):(ticker.c:462){myNamespace}内存使用情况:总字节23816040182索引字节3222810368 sindex字节0数据字节20593229814用过的pct 49.29
2018年9月29日15:36:21 GMT + 0530:INFO(info):(ticker.c:170)NODE-ID bb99a89200a0102 CLUSTER-SIZE 32
2018年9月29日15:36:21 GMT + 0530:INFO(信息):(ticker.c:253)系统内存:空闲字节5095788空闲字节9堆KB(30851170,49358076,52596736)堆-efficiency-pct 58.7
2018年9月29日15:36:21 GMT + 0530:INFO(信息):(ticker.c:267)进行中:tsvc-q 0信息-q 0 nsup-delete-q 0 rw-hash 0代理-哈希0树-gc-q 0
所以我了解的是(23816040182 + 3222810368)= 27038850550字节i.e. 27G。我的包装盒上有52G RAM,但是航空加气过程消耗了90%的RAM:
>ps aux | grep asd
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 28994 14.3 90.5 59059460 49552192 ? Ssl Jun22 20539:09 /usr/bin/asd --config-file /etc/aerospike/aerospike.conf
>free -mh
total used free shared buffers cached
Mem: 52G 51G 303M 0B 12M 3.7G
-/+ buffers/cache: 48G 4.0G
Swap: 0B 0B 0B
对于同一节点,我在用户界面中看到以下内容:
因此,数据+索引仅为27G,而使用的内存为49G。无法理解这种巨大的差异以及如何避免这种情况。
我们还删除了约1.2亿行,但在内存使用方面仍然没有太大改善,唯一的选择似乎是重新启动该框,这可能与此issue有关。
答案 0 :(得分:2)
似乎您的内存实际上是零散的,但让我们分解一下不同的数字:
1- memory-usage: total-bytes 23816040182 index-bytes 3222810368 sindex-bytes 0 data-bytes 20593229814 used-pct 49.29
所占的总内存为23816040182字节(〜22.18 GiB),这是您在主索引3222810368中的拥有量(50,356,412条记录,每条64字节)与数据本身(即您在内存中的数据)之和),即20593229814(〜19.2 GiB)。主索引部分位于共享内存中。
2- system-memory: free-kbytes 5095788 free-pct 9 heap-kbytes (30851170,49358076,52596736) heap-efficiency-pct 58.7
报告的可用系统内存在3.12版本中不正确。不幸的是,您的可用空间不足(请参阅修复程序[AER-5810]-(状态)日志行情记录过度报告了版本3.16.0.4中的可用系统内存。
更有趣的是堆用法(来自log reference manual),您可以将其读取为:
堆KB-顺序:({heap_allocated_kbytes,heap_active_kbytes,heap_mapped_kbytes)。
heap-efficiency-pct:提供jemalloc堆碎片的指示。这表示heap_allocated_kbytes / heap_mapped_kbytes的比率。较低的数字表示较高的碎片率。
您分配了30851170 KiB(〜29.4 GiB),但是总共分配了52596736 KiB(〜50.1 GiB映射),这效率不高(效率58.7%),表明有些碎片。顺便说一下,这不包括共享内存。对于19 GiB数据,分配的29 GiB似乎有点高。我希望所有使用的其他内部结构的开销都更少。
主要问题是效率低下,但碎片化。您有没有启用THP?我实际上找到了这篇文章(Understanding Linux Memory Usage),它也遍历了那些内存报告详细信息,并遍历了可能导致此问题的“大页面”配置。