java - Datastax solr : Cassandra will now flush up to the two largest memtables to free up memory

标签 java solr cassandra datastax-enterprise datastax

我正在具有 4Go RAM 的单个节点上使用 datastax 3.1。 除了“--Xss”之外,我没有更改 cassandra-en.sh 和 cassandra.yaml 中的任何内容(因为我的 java 版本需要更多) 因此默认情况下 Cassandra 设置为 1Go 我的 -Xms 和 -Xmx 参数: -Xms1024M -Xmx1024M

但是在大​​约 200 000 行(在 3 个不同的 column_families 中)之后插入我的数据时,Solr 和 cassandra 日志不断重复这种警告:

WARN StorageService Flushing CFS(Keyspace='OpsCenter',​ ColumnFamily='rollups60') to relieve memory pressure 17:58:07

WARN GCInspector Heap is 0.8825103486201678 full. You may need to reduce memtable and/or cache sizes. Cassandra will now flush up to the two largest memtables to free up memory. Adjust flush_largest_memtables_at threshold in cassandra.yaml if you don't want Cassandra to do this automatically

那么,好吧,我的堆已满,但为什么刷新后,我的堆仍然满了?

如果我此时停止插入数据。警告不断重复。 如果我停止并重新启动 cassandra。没问题就提出来

看起来像是内存泄漏问题,对吗? 那么我应该看哪里呢?

感谢您 future 的帮助。

最佳答案

Solr 的缓存是消耗内存的一件事。查看每个 Solr 核心的“conf”目录中的 solrconfig.xml 文件,并查看为缓存配置的值,例如:

<filterCache class="solr.FastLRUCache"
             size="100"
             initialSize="0"
             autowarmCount="0"/>

可能有多个像这样的条目。确保至少将autowarmCount 和initialSize 设置为0。此外,将“size”值降低到较小的值,例如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 进行测试?

关于java - Datastax solr : Cassandra will now flush up to the two largest memtables to free up memory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19364883/

相关文章:

java - 抽象类中的静态方法

java - 使用循环发送 URL - Eclipse Java Tomcat

java - Spring 启动: getting this error - Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured

cassandra - 在 CQL 中对分区键和(聚集键或索引列)使用 IN 运算符

java - 如何检查我的系统上是否安装了 JDBC?

java - 频繁调用 Solr 查询期间 Solr 错误 -> "Cannot assign requested address (connect failed)"

java - 安装Chronix

database - 在 solr 中执行增量导入时的时间戳兼容性

sql - SparkSQL 错误表未找到

cassandra - 什么是 cassandra 的突变?