长话短说
我有Apache Solr安装在具有 8 GB RAM 的 Windows Server R2 64 位计算机上。默认情况下,JVM 似乎使用了大约 256 MB 的内存。由于我有一些相当大的文件要用它编制索引,有时我会遇到 Java 堆空间 OutOfMemoryError。
我应该如何增加 Solr 可用的内存大小?
更多详情
大部分documentation/posts我在网上发现指向类似 java -Xms1024m -Xmx2048m -jar start.jar
的东西,但我没有通过命令行运行 Solr。它作为 Windows 服务运行。我想在 Solr 安装文件夹的某处有一个配置选项可以设置它,但我找不到它(此外,我不是很熟悉 Java 堆栈,因为我是 .NET 开发人员)。
我试过的几件事:
- 在
/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 服务(再次, 不熟悉这里的语法)。有一个 similar answer用于基于 Ubuntu 的安装,但脚本文件不同。 - 在上述更改后运行
/Bitnami/solr-4.5.0-0/serviceinstall.bat REMOVE
和serviceinstall.bat INSTALL
下面是 Solr 的 Dashboard 截图。
有什么想法吗?
更新1
/Bitnami/solr-4.5.0-0/apache-solr/scripts/
中有一个 serviceinstall.bat
文件,其中包含我尝试修改的 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...)以及语法应该是什么?
最佳答案
经过更多研究,我设法增加了堆大小,方法是根据@rchukh 的评论。
我之前曾尝试修改该文件,但在进行任何更改后需要重新安装 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
关于java - 如何在 Windows Bitnami 堆栈上为 Solr 4.5 设置 JVM 堆大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19472169/