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
所以,好吧,我的堆已经满了,但是为什么冲洗之后,我的堆仍然满了呢
如果我现在停止插入数据。警告不断重复。 如果我停下来重启卡桑德拉。没问题
看起来像是内存泄漏问题,对吗? 那我该去哪里看呢
谢谢你以后的帮助
# 1 楼答案
Cassandra试图清理堆空间,但是刷新memtables不会刷新Solr堆数据结构
对于索引大小,再加上加载Lucene字段缓存的查询,没有分配足够的堆空间。最好的建议是分配更多堆空间
要查看字段缓存内存使用情况,请执行以下操作:
http://www.datastax.com/docs/datastax_enterprise3.1/solutions/dse_search_core_status
# 2 楼答案
有一件事是索尔的缓存。看看你的solrconfig。xml文件,并查看为缓存配置的值,例如:
可能有多个这样的条目。确保至少autowarmCount和initialSize设置为0。此外,将“大小”值降低到较小的值,例如100或其他值。所有这些值都表示缓存中的条目数
另一件可能有用的事情是配置Solr以更频繁地执行硬提交。查找以下条目:
上述设置将在每次添加5000个文档时提交到磁盘,或者在上次提交后15秒后提交到磁盘,而上次提交总是先到的。还将openSearcher设置为false
最后,查找这些条目并将其设置为:
现在,一次在Solr上进行所有这些修改肯定会让它运行得慢很多。相反,尝试以增量方式创建它们,直到消除内存错误。此外,可能只是需要为Java进程分配更多内存。如果你说这台机器有4GB内存,为什么不用-Xmx2g或-Xmx3g来测试呢