欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

Apache Solr ApacheSolr intermittently shuts downApache Solr间歇性关闭 有大用 有大大用

2

Occasionally my Apache Solr will just go down and this is spammed in the log files:
有时候我的Apache Solr会宕机,这是在日志文件中发送的垃圾邮件:

Sep 24, 2013 1:00:21 AM org.apache.solr.common.SolrException log
SEVERE: java.lang.OutOfMemoryError: Java heap space

The dedicated server my Solr install is on has plenty of free RAM (16gb), what can be causing this? I've tried some Google Fu but with no solid answer as to why, or how to fix beyond using -Xmx512mb to raise the allowed heap size which I don't think is the most ideal method? I could be wrong.
我安装Solr的专用服务器有足够的空闲RAM(16 GB),是什么原因导致的?我试过一些Google Fu,但没有确切的答案,为什么,或者如何修复,除了使用-Xmx 512 mb来提高允许的堆大小,我不认为这是最理想的方法?我可能错了。

I'm using Jetty with my Solr install, is there a way to tell Jetty to use more memory? or to tell it how to resolve this error should it happen again.
我在Solr安装中使用Jetty,有没有办法告诉Jetty使用更多内存?或者告诉它如何解决这个错误,如果它再次发生。

Extra Info: The thing is if I set any large Xms or Xmx values, even if it's within my free memory left on the server I get There is insufficient memory for the Java Runtime Environment to continue.
额外信息:问题是,如果我设置了任何大的Xms或Xmx值,即使它在我在服务器上留下的空闲内存内,我也会得到没有足够的内存供Java Runtime环境继续运行。

#  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

This is still an ongoing issue and we've been seeing a new kind of error in logs:
这仍然是一个持续的问题,我们已经看到了一种新的错误日志:

Oct 02, 2013 7:14:10 AM org.apache.solr.common.SolrException log
SEVERE: java.lang.OutOfMemoryError: GC overhead limit exceeded

We're looking at upgrading our servers RAM in hopes that this will resolve our issue, but it doesn't explain why SOLR isn't using the otherwise free RAM.
我们正在考虑升级我们的服务器RAM,希望这将解决我们的问题,但它不能解释为什么SOLR不使用其他免费的RAM。

1 Answer 正确答案
1答案

1

From the documentation link
从文档链接

Memory usage in solr:solr中的内存使用:

  • All of the document's fields must simultaneously fit into memory.
    文档的所有字段必须同时放入内存。

  • Each individual ... tag in the input XML must fit into memory
    每一个人...标签必须适合内存

Solving out of memory exception解决内存不足异常

  • The easiest way to fight this error, assuming the Java virtual machine isn't already using all your physical memory, is to increase the amount of memory allocated to the Java virtual machine running Solr. To do this for the example/ in the Solr distribution, if you're running the standard Sun virtual machine, you can use the -Xms and -Xmx command-line parameters:

    java -Xms512M -Xmx1024M -jar start.jar
    


    假设Java虚拟机尚未使用您的所有物理内存,解决此错误的最简单方法是增加分配给运行Solr的Java虚拟机的内存量。为了在Solr发行版中实现这一点, 如果您运行的是标准的Sun虚拟机,则可以使用-Xms和-Xmx命令行参数:

    java -Xms512M -Xmx1024M -jar start.jar 

这条命令是在Java环境下运行一个名为start.jar的jar包,同时指定了Java虚拟机(JVM)的初始堆内存大小(-Xms)和最大堆内存大小(-Xmx)。

  • java 是启动Java应用程序的命令。

  • -Xms512M 指定JVM启动时的初始堆内存大小为512MB(Megabytes,兆字节)。这意味着JVM在启动时就会预先分配这么多内存给堆空间,用于存放对象实例。

  • -Xmx1024M 指定JVM可以使用的最大堆内存大小为1024MB(即1GB,Gigabytes,吉字节)。这是JVM堆内存使用的上限,超出这个限制JVM会抛出内存溢出错误。

  • -jar 参数告诉Java命令行工具接下来的参数是一个jar文件,即Java ARchive,Java归档文件,是一种打包Java类文件、图像、声音和/或其他资源的文件格式。

  • start.jar 是要运行的jar文件的名称。

综上所述,这条命令的意思是:使用Java命令行工具,以初始堆内存512MB和最大堆内存1024MB的配置,运行名为start.jar的Java应用程序。这样的配置有助于控制应用程序的内存使用,避免因为内存不足而导致的程序崩溃,同时也能够优化内存使用,提高应用程序的性能。

Play with the values depending on your input
根据您的输入处理值

Your Answer
你的答案


普通分类: