我正在具有 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/