Datastax solr:Cassandra现在将刷新两个最大的memtables以释放内存
我正在使用4Go内存的单个节点上使用datastax 3.1。 我没有改变cassandra-en.sh和cassandra.yaml中的任何东西,除了“--Xss”(因为我的java版本需要更多一点) 所以默认情况下Cassandra设置为1Go my -Xms和-Xmx参数:-Xms1024m -Xmx1024MDatastax solr:Cassandra现在将刷新两个最大的memtables以释放内存
但同时插入我的数据大约200 000行之后(在3个不同column_families),Solr的和卡桑德拉日志保留重复这种警告:
WARN StorageService法拉盛CFS(KEYSPACE = 'OpsCenter', ColumnFamily ='rollups60')来缓解内存压力17:58:07
警告GCInspector堆是0.8825103486201678满。您可能需要减少 可记录和/或缓存大小。卡桑德拉现在将刷新两个最大的存储空间以释放内存。调整flush_largest_memtables_at在cassandra.yaml 门槛,如果你不想卡桑德拉自动做到这一点
所以,我的OK堆是满的,但为什么每次冲洗后,我仍堆满了吗?
如果此时我停止插入数据。警告不断重复。 如果我停下来重新启动cassandra。没问题提高
它看起来像内存泄漏问题吧? 那么我应该在哪里看?
感谢您的未来帮助。
一两件事,这是一个内存猪是Solr的缓存。看看每个Solr的核心的“CONF”目录内的文件solrconfig.xml中,并期待在配置缓存,如值:像这样的
<filterCache class="solr.FastLRUCache"
size="100"
initialSize="0"
autowarmCount="0"/>
可能有多个条目。确保至少将autowarmCount和initialSize设置为0.此外,将“大小”值降低为小数目,例如100或其他值。所有这些值都指的是缓存中的条目数量。
另一件可能有用的事情是配置Solr更频繁地进行硬提交。寻找这样的一个条目:
<!-- stuff ommited for brevity -->
<autoCommit>
<maxDocs>5000</maxDocs>
<maxTime>15000</maxTime>
<openSearcher>false</openSearcher>
</autoCommit>
以上设置将5000个文档已添加或15秒过去了,因为最后一次提交,以先到者为准每次都提交到磁盘。还将openSearcher设置为false。
最后,寻找这些条目并将它们设置如下:
<ramBufferSizeMB>16</ramBufferSizeMB>
<maxBufferedDocs>5000</maxBufferedDocs>
现在,让上Solr的所有这些修改一次,必将使其运行速度慢了很多。尝试增加它们直到你摆脱内存错误。另外,它可能只是您需要为Java进程分配更多内存。如果您说机器具有4 Gb的RAM,为何不尝试使用-Xmx2g或-Xmx3g进行测试?
Cassandra正在尝试清除堆空间,但是刷新memtables不会刷新Solr堆数据结构。
对于索引大小,加上可能加载Lucene字段缓存的查询,没有足够的堆空间分配。最好的建议是分配更多的堆空间。
查看域高速缓存内存使用:
http://www.datastax.com/docs/datastax_enterprise3.1/solutions/dse_search_core_status
我很困惑。有没有办法强制Solr在物理内存中交换以避免JVM堆满?我知道,这将是时间成本,但如果不是这样,那意味着对于一个节点,我只能设置大约1G0的索引数据,所以(在我的情况下)大约是2 Go的实际数据...... – hebus