有时我的 Apache Solr 会宕机,这会在日志文件中发送垃圾邮件:
Sep 24, 2013 1:00:21 AM org.apache.solr.common.SolrException log
SEVERE: java.lang.OutOfMemoryError: Java heap space
我安装 Solr 的专用服务器有大量可用 RAM (16gb),这可能是什么原因造成的?我已经尝试了一些 Google Fu,但没有确切的答案来解释为什么,或者如何解决除了使用 -Xmx512mb 来提高允许的堆大小,我认为这不是最理想的方法?我可能是错的。
我在安装 Solr 时使用 Jetty,有没有办法告诉 Jetty 使用更多内存?或者告诉它如果再次发生此错误如何解决。
额外信息:问题是,如果我设置了任何大的 Xms 或 Xmx 值,即使它在我留在服务器上的可用内存之内,我也会得到 Java 运行时环境无法继续运行的内存不足。
# Out of Memory Error (allocation.inline.hpp:58), pid=10851, tid=47145744939328
#
# JRE version: 7.0_11-b21
# Java VM: Java HotSpot(TM) 64-Bit Server VM (23.6-b04 mixed mode linux-amd64 compressed oops)
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
VM Arguments:
jvm_args: -Dsolr.solr.home=/opt/solr/solr -Xmx64m -Djetty.logs=/var/log/solr -Djetty.home=/root/wmv_solr -Djava.io.tmpdir=/tmp -Xmx256m
java_command: /root/wmv_solr/start.jar /root/wmv_solr/etc/jetty-logging.xml /root/wmv_solr/etc/jetty.xml
Launcher Type: SUN_STANDARD
Environment Variables:
JAVA_HOME=/usr/java/jdk1.7.0_11
CLASSPATH=.:/usr/java/jdk1.7.0_11/lib/classes.zip
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/java/jdk1.7.0_11/bin:/opt/ant/bin:/usr/local/bin:/usr/X11R6/bin:/root/bin
SHELL=/bin/bash
/proc/meminfo:
MemTotal: 4033216 kB
MemFree: 755528 kB
Buffers: 274004 kB
Cached: 1939244 kB
SwapCached: 168388 kB
Active: 1923800 kB
Inactive: 1052876 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 4033216 kB
LowFree: 755528 kB
SwapTotal: 4980024 kB
SwapFree: 4784124 kB
Dirty: 2092 kB
Writeback: 0 kB
AnonPages: 762616 kB
Mapped: 39044 kB
Slab: 256200 kB
PageTables: 17496 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
CommitLimit: 6996632 kB
Committed_AS: 1964148 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 265936 kB
VmallocChunk: 34359471775 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
Hugepagesize: 2048 kB
这仍然是一个持续存在的问题,我们在日志中看到了一种新的错误:
Oct 02, 2013 7:14:10 AM org.apache.solr.common.SolrException log
SEVERE: java.lang.OutOfMemoryError: GC overhead limit exceeded
我们正在考虑升级我们的服务器 RAM,希望这能解决我们的问题,但这并不能解释为什么 SOLR 不使用其他可用的 RAM。