有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaDataStaxSolr:Cassandra现在将刷新两个最大的memtables以释放内存

我在一个具有4Go内存的节点上使用datastax 3.1。 我没有改变卡桑德拉的任何事。她和卡桑德拉。yaml除了“-Xss”(因为我的java版本需要更多) 因此,默认情况下,Cassandra设置为1Go my-Xms和-Xmx参数:-Xms1024M-Xmx1024M

但是,在大约20万行(在3个不同的列_族中)之后插入我的数据时,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

所以,好吧,我的堆已经满了,但是为什么冲洗之后,我的堆仍然满了呢

如果我现在停止插入数据。警告不断重复。 如果我停下来重启卡桑德拉。没问题

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

谢谢你以后的帮助


共 (2) 个答案

  1. # 2 楼答案

    有一件事是索尔的缓存。看看你的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进程分配更多内存。如果你说这台机器有4GB内存,为什么不用-Xmx2g或-Xmx3g来测试呢