当前位置: 首页 > 知识库问答 >
问题:

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

郎弘业
2023-03-14

我在Windows Server R2 64位机器上安装了Apache Solr,具有8 GB的RAM。默认情况下,JVM似乎使用了大约256 MB的内存。由于我有一些相当大的文件用于索引,有时我会Java堆空间OutOfMemoryError。

我应该如何增加Solr可用的内存大小?

我在网上找到的大多数留档/帖子都指向像java-Xms1024m-Xmx2048m-jarstart.jar这样的东西,但是我没有通过命令行运行Solr。它是作为Windows服务运行的。我想在Solr安装文件夹的某个地方有一个配置选项可以设置它,但是我找不到它(此外,我不是很熟悉Java堆栈,因为我是一个。NET开发人员)。

我尝试了几件事:

  • 在Bitnami/solr-4.5.0-0/scripts/setenv中设置环境变量。bat:set JAVA\u OPTS=“%JAVA\u OPTS%-XX:MaxPermSize=1024m-Xms1024-Xmx1024m”
  • 修改Bitnami/solr-4.5.0-0/scripts/serviceinstall。bat,并尝试向命令行添加JvmOptions参数,以安装Jetty服务(同样,这里不熟悉语法)。基于Ubuntu的安装也有类似的答案,但脚本文件不同
  • 正在运行Bitnami/solr-4.5.0-0/serviceinstall。bat删除和服务安装。bat在进行上述更改后安装

下面是Solr的仪表板截图。

知道吗?

有一个服务安装。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...)以及语法应该是什么吗?

共有2个答案

燕扬
2023-03-14

您可以更改Bitnami\solr-5.2.1-1\apache solr\bin\solr。在里面cmd。有一句话是这样说的:

set SOLR_JAVA_MEM=-Xms512m -Xmx512m

把那个改成

set SOLR_JAVA_MEM=-Xms2g -Xmx2g

然后您需要重新启动服务:

net stop solrJetty 
net start solrJetty 

转到:http://localhost:8983/solr/#/您将看到新值生效。

慕容成和
2023-03-14

在进一步研究之后,我通过html" target="_blank">修改Bitnami/solr-4.5.0-0/apache-solr/scripts/serviceinstall来增加堆的大小。bat根据@rchukh的评论编写脚本。

我以前尝试过修改该文件,但在那里进行任何更改后都需要重新安装Solr服务。问题是我试图使用Bitnami/solr-4.5.0-0/serviceinstall重新安装它。bat。该批处理脚本应该运行所有其他服务安装。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
 类似资料:
  • 我有一个Grails 2.3。X项目,除非使用命令行参数指定更多堆栈大小,否则无法编译。目前这很好,但每次我第一次构建项目时都需要导出/设置JVM选项。此外,刚开始项目的开发人员总是会遇到这个问题,所以我希望它成为签出版本控制的代码的一部分。 有没有办法在Grails 2.3中设置stacksize(-Xss)JVM选项。X BuildConfig? P、 Xss JVM选项是文档较少的选项之一。

  • 我来自C/C++背景,在这里一个进程内存分为: null 我想把我的注意力集中在这一点上,当我阅读JVM中的堆和堆栈时,我们是在谈论堆栈和堆的概念吗?并且整个JVM的实际内存驻留在堆上(这里指的是堆的C++概念)?

  • 问题内容: 每当加载一个类时,什么存储在堆中以及什么存储在堆栈中? 线程也驻留在哪里? 问题答案: 引用类型在堆中。 任何原始类型的数据和对堆上值(方法的参数/局部变量)的引用都在堆栈上。 每个线程都有自己的堆栈。 应用程序中的所有线程共享同一堆。

  • 问题内容: 有没有办法从正在运行的Java程序中设置堆大小? 问题答案: 没有。 对于具有非常多的堆需求的应用程序,您可以做的是设置最大的堆大小-Xmx并进行调整,以使堆缩小时该应用程序不会挂在大量内存上(使用默认设置即可) )。 但是请注意,当应用程序实际使用的内存变化剧烈且快速时,这可能会导致性能问题-在这种情况下,最好将其挂在所有内存上,而不是仅将其退还给操作系统以声明使用它再过一秒钟。您可

  • 如何设置Apache Ignite通过运行时可用的最大堆内存?文件似乎没有涵盖这项非常基本的任务。此外,如何验证设置是否实际工作? 我读到命令行选项可用于将JVM参数从传递到JVM进程,但我无法找到它实际工作的证据。例如,如果我按如下方式启动Ignite: 它在命令行中不明确地列出了和。

  • 我们Java开发人员有时会使用来确保我们为每个特定于线程的堆栈提供了1MB的空间。现在,我经常感到困惑,JVM从哪里借用了1MB,从堆或系统内存中借用,或者Java为线程分配任何特定的内存。你能帮我理解一下吗? 此外,我们是否有一个可视化(插件)运行时工具,可以以可理解的方式显示堆和堆栈的内容? 提前感谢。