我在Windows Server R2 64位计算机上安装了Apache Solr,内存为8 GB。默认情况下,JVM似乎使用~256 MB的内存。由于我有一些非常大的文件用于索引,有时我得到Java堆空间OutOfMemoryError。
我应该如何增加Solr可用的内存大小?
我在网上找到的大多数documentation / posts都指向java -Xms1024m -Xmx2048m -jar start.jar
,但我没有通过命令行运行Solr。它作为Windows服务运行。我想有一个配置选项可以在Solr安装文件夹中设置它,但是我无法找到它(此外,由于我是.NET开发人员,因此不熟悉Java堆栈。)
我尝试过几件事:
/Bitnami/solr-4.5.0-0/scripts/setenv.bat
中设置环境变量:set JAVA_OPTS="%JAVA_OPTS% -XX:MaxPermSize=1024m -Xms1024
-Xmx1024m"
/Bitnami/solr-4.5.0-0/scripts/serviceinstall.bat
并尝试将JvmOptions
参数添加到命令行以安装Jetty服务(同样,这里不熟悉语法)。基于Ubuntu的安装有similar answer,但脚本文件不同。/Bitnami/solr-4.5.0-0/serviceinstall.bat REMOVE
和serviceinstall.bat INSTALL
下面是Solr的仪表板截图。
有什么想法吗?
serviceinstall.bat
中有一个/Bitnami/solr-4.5.0-0/apache-solr/scripts/
文件,其中包含我尝试修改但未能获得预期结果的Jvm选项。这是文件中的那一行(添加换行符以便更好地显示):
"D:\BitNami\solr-4.5.0-0/apache-solr\scripts\prunsrv.exe" //IS//solrJetty
--DisplayName="solrJetty"
--Install="D:\BitNami\solr-4.5.0-0/apache-solr\scripts\prunsrv.exe"
--LogPath="D:\BitNami\solr-4.5.0-0/apache-solr\logs"
--LogLevel=Debug
--StdOutput=auto
--StdError=auto
--StartMode=Java
--StopMode=Java
--Jvm=auto
++JvmOptions=-DSTOP.PORT=8079
++JvmOptions=-DSTOP.KEY=s3crEt
++JvmOptions=-Djetty.home="D:\BitNami\solr-4.5.0-0/apache-solr"
++JvmOptions=-Dsolr.solr.home="D:\BitNami\solr-4.5.0-0/apache-solr/solr"
--Jvm=auto
++JvmOptions=-Djetty.logs="D:\BitNami\solr-4.5.0-0/apache-solr\logs"
--JavaHome="D:\BitNami\solr-4.5.0-0\java"
++JvmOptions=-XX:MaxPermSize=128M
--Classpath="D:\BitNami\solr-4.5.0-0/apache-solr\lib\*";"D:\BitNami\solr-4.5.0-0/apache-solr\start.jar"
--StartClass=org.eclipse.jetty.start.Main
++StartParams="D:\BitNami\solr-4.5.0-0/apache-solr\etc\jetty.xml"
--StopClass=org.eclipse.jetty.start.Main
++StopParams=--stop
++StopParams=-DSTOP.PORT=8079
++StopParams=-DSTOP.KEY=s3crEt
有谁知道在哪里放置额外的JvmOptions(Xmx,Xms ......)以及语法应该是什么?
答案 0 :(得分:7)
经过一些研究,我已经设法根据@ rchukh的评论修改/Bitnami/solr-4.5.0-0/apache-solr/scripts/serviceinstall.bat
脚本来增加堆大小。
我之前尝试过修改该文件,但是在进行任何更改之后需要重新安装Solr服务。问题是我尝试使用/Bitnami/solr-4.5.0-0/serviceinstall.bat
重新安装它。该批处理脚本应该运行所有子文件夹中的所有其他serviceinstall.bat
脚本,但它不会运行我需要的脚本。
所以,这就是我的/Bitnami/solr-4.5.0-0/apache-solr/scripts/serviceinstall.bat
脚本现在的样子(为了便于阅读而打破了更长的行):
@echo off
rem -- Check if argument is INSTALL or REMOVE
if not ""%1"" == ""INSTALL"" goto remove
"D:\BitNami\solr-4.5.0-0/apache-solr\scripts\prunsrv.exe" //IS//solrJetty
--DisplayName="solrJetty"
--Install="D:\BitNami\solr-4.5.0-0/apache-solr\scripts\prunsrv.exe"
--LogPath="D:\BitNami\solr-4.5.0-0/apache-solr\logs"
--LogLevel=Debug
--StdOutput=auto
--StdError=auto
--StartMode=Java
--StopMode=Java
--Jvm=auto
++JvmOptions=-DSTOP.PORT=8079
++JvmOptions=-DSTOP.KEY=s3crEt
++JvmOptions=-Djetty.home="D:\BitNami\solr-4.5.0-0/apache-solr"
++JvmOptions=-Dsolr.solr.home="D:\BitNami\solr-4.5.0-0/apache-solr/solr"
--Jvm=auto
++JvmOptions=-Djetty.logs="D:\BitNami\solr-4.5.0-0/apache-solr\logs"
--JavaHome="D:\BitNami\solr-4.5.0-0\java"
++JvmOptions=-XX:MaxPermSize=256M
++JvmOptions=-Xms1024M
++JvmOptions=-Xmx1024M
--Classpath="D:\BitNami\solr-4.5.0-0/apache-solr\lib\*";
"D:\BitNami\solr-4.5.0-0/apache-solr\start.jar"
--StartClass=org.eclipse.jetty.start.Main
++StartParams="D:\BitNami\solr-4.5.0-0/apache-solr\etc\jetty.xml"
--StopClass=org.eclipse.jetty.start.Main
++StopParams=--stop
++StopParams=-DSTOP.PORT=8079
++StopParams=-DSTOP.KEY=s3crEt
net start solrJetty >NUL
goto end
:remove
rem -- STOP SERVICE BEFORE REMOVING
net stop solrJetty >NUL
sc delete solrJetty
:end
exit
修改该脚本后,您需要通过运行两次(删除并安装)重新安装该服务:
D:/Bitnami/solr-4.5.0-0/apache-solr/scripts/serviceinstall.bat REMOVE
D:/Bitnami/solr-4.5.0-0/apache-solr/scripts/serviceinstall.bat INSTALL
答案 1 :(得分:1)
您可以更改Bitnami\solr-5.2.1-1\apache-solr\bin\solr.in.cmd
。
有一句话说:
set SOLR_JAVA_MEM=-Xms512m -Xmx512m
将其更改为
set SOLR_JAVA_MEM=-Xms2g -Xmx2g
然后你需要重启服务:
net stop solrJetty
net start solrJetty
转到:http://localhost:8983/solr/#/您会看到有效的新值。