【问题标题】:How to set JVM heap size for Solr 4.5 on Windows Bitnami stack?如何在 Windows Bitnami 堆栈上为 Solr 4.5 设置 JVM 堆大小?
【发布时间】:2013-10-19 23:15:03
【问题描述】:

TL;DR

我在具有 8 GB RAM 的 Windows Server R2 64 位计算机上安装了 Apache Solr。默认情况下,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 的仪表板屏幕截图。

有什么想法吗?

更新 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...) 以及语法应该是什么?

【问题讨论】:

  • 我会确保您使用的是 64 位版本,默认应该是主内存的 1/4 或 2 GB。对于 32 位客户端 JVM,默认值为 128 MB 堆,其余可以是共享库和线程堆栈。
  • @PeterLawrey 从提供的installer 链接中可以看出,Windows 仅支持 x86。
  • 根据this thread,solr安装目录中应该有D:\BitNami\solr-4.5.0-0/apache-solr/scripts/ctl.bat之类的东西,可以指定JVM设置
  • @rchukh 太可悲了。当您在 Windows 上使用 64 位 JVM 时会发生什么。
  • 嗯...正如我所见 - 有一个 ++JvmOptions=-XX:MaxPermSize=128M ,所以如果你愿意,你可能可以更改大小并添加两行 - ++JvmOptions=-Xms1024M++JvmOptions=-Xmx1024M - 紧随其后.

标签: java solr jvm-arguments bitnami


【解决方案1】:

经过更多研究,我设法通过根据@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

【讨论】:

    【解决方案2】:

    您可以更改 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/#/ 您将看到新值生效。

    【讨论】:

      猜你喜欢
      • 2012-07-18
      • 1970-01-01
      • 2014-03-14
      • 2017-12-28
      • 2016-04-17
      • 2014-07-31
      • 1970-01-01
      • 2010-10-20
      • 2016-06-22
      相关资源
      最近更新 更多