java - 如何在 Windows Bitnami 堆栈上为 Solr 4.5 设置 JVM 堆大小?

标签 java solr jvm-arguments bitnami

长话短说

我有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 REMOVEserviceinstall.bat INSTALL

下面是 Solr 的 Dashboard 截图。

Solr dashboard screenshot

有什么想法吗?

更新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/

相关文章:

java - Solrcloud Zookeper 设置 : No registered leader was found after waiting for 4000ms , 集合:c1 切片:shard2

java - -HeapDumpOnOutOfMemoryError 和 +HeapDumpOnOutOfMemoryError 选项有什么区别?

java - 解析 JSON 时出现错误

apache - cursorMark是无状态的以及它如何解决深度分页

java - Cassandra 表分析方法?

java - JVM 垃圾收集和内存中 Java 数据库

java - 我可以在 Yosemite 上运行 32 位 JVM 吗?

java - 使 ScalaFx 在 JDK 8 和 11 上都能工作

java - 重命名时文件不会被删除

java - 如何将 Selenide 与现有的 selenium webdriver 代码集成?