我的项目中有一个上传文件的场景。当我尝试上传大文件时,它会出现OutOfMemory错误。这个错误与Java堆大小有关。
你如何增加Java堆大小以及我需要更改哪个文件?我正在使用jboss 5.1服务器来运行我的应用程序。
我的项目中有一个上传文件的场景。当我尝试上传大文件时,它会出现OutOfMemory错误。这个错误与Java堆大小有关。
你如何增加Java堆大小以及我需要更改哪个文件?我正在使用jboss 5.1服务器来运行我的应用程序。
你可以像平常设置JVM参数一样设置它,例如-Xms1024m -Xmx2048m
表示最小堆为1GB,最大堆为2GB。JBoss将使用JAVA_OPTS
环境变量来包括额外的JVM参数,你可以在/bin/run.conf.bat
文件中指定它:
set "JAVA_OPTS=%JAVA_OPTS% -Xms1024m -Xmx2048m"
然而,这更像是一个临时解决方案而非真正的解决方案。如果多个用户同时上传大文件,则早晚会遇到同样的问题。你需要不断增加内存,却没有实质效果。相反,你应该将文件上传解析器配置为将上传的文件存储在临时磁盘上,而不是完全存储在内存中。只要不清楚你使用的解析器是哪个,就无法给出合适的答案。然而,通常情况下,Apache Commons FileUpload 在幕后被使用,因此你应该阅读以“threshold size”为关键词的文档,以配置上传文件的内存限制。当文件大小超过阈值时,它将被写入磁盘。
/bin/standalone.conf
并在其中放置您所需的JAVA_OPTS。在run.conf文件中编辑以下条目。但是如果您在同一个JBoss上运行多个JVM,则可能希望通过命令行参数 -Xms2g -Xmx4g(或您首选的启动/最大内存设置)运行它。
if [ "x$JAVA_OPTS" = "x" ]; then
JAVA_OPTS="-Xms2g -Xmx4g -XX:MaxPermSize=256m -Dorg.jboss.resolver.warning=true
bin/standalone.conf
请检查以下代码行:
JAVA_OPTS
并根据您的堆大小需求进行相应更改。
-Xms1303m: initial heap size in megabytes
-Xmx1303m: maximum heap size in megabytes
JAVA_OPTS="-Xms1024M -Xmx2048M -XX:MaxPermSize=2048M -XX:MaxHeapSize=2048M"
Windows:
bin/standalone.conf.bat
JAVA_OPTS="-Xms1024M -Xmx2048M -XX:MaxPermSize=2048M -XX:MaxHeapSize=2048M"
现在重新启动服务器,它将可以正常工作而不会提示任何堆大小错误。
如需更多信息,请参阅下面的链接。
运行Java时,请使用-Xms和-Xmx命令行选项:
-Xms<size> set initial Java heap size
-Xmx<size> set maximum Java heap size
需要更多帮助,请在命令行中键入java -X
。
在JBoss的bin文件夹中寻找run.bat文件(Unix上是run.sh)
查找以下行:set JAVA_OPTS
,(在Unix上只需查找JAVA_OPTS),在该行末尾添加-Xmx512m。将数字更改为您想要分配给JBoss的内存量。
如果您正在使用自定义脚本启动jboss实例,则也可以在那里添加set JAVA_OPTS选项。
在我的情况下,对于 jboss 6.3
,我必须更改文件 jboss-eap-6.3\bin\standalone.conf.bat
中的 JAVA_OPTS
并设置以下值 -Xmx8g -Xms8g -Xmn3080m
以便 jvm 占用 8GB 空间。
需要更改什么?
set "JAVA_OPTS=%JAVA_OPTS% -Xms1024m -Xmx2048m"
在哪里更改?(通常情况下)
bin/standalone.conf(Linux) standalone.conf.bat(Windows)
如果您正在使用覆盖现有设置的自定义脚本,该怎么办?
setAppServerEnvironment.cmd/.sh(文件名可能是这种类型)
我们的一个委员会成员已经提供了更多信息!BalusC。
set "JAVA_OPTS=-Xms1G -Xmx1G -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=1024m"
JAVA_OPTS="-Xms2048M -Xmx2048M"