将我所有应用程序的堆大小增加 Tomcat
Increase HeapSize in Tomcat for all my applications
我在 docker 中使用 tomcat:8。
这是一些重要的设置(默认)。
$ java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'
Picked up JAVA_TOOL_OPTIONS: -Duser.home=/home/jboss -Duser.name=jboss
intx CompilerThreadStackSize = 0 {pd product}
uintx ErgoHeapSizeLimit = 0 {product}
uintx HeapSizePerGCThread = 87241520 {product}
uintx InitialHeapSize := 33554432 {product}
uintx LargePageHeapSizeThreshold = 134217728 {product}
uintx MaxHeapSize := 524288000 {product}
intx ThreadStackSize = 1024 {pd product}
intx VMThreadStackSize = 1024 {pd product}
现在我需要增加最大堆大小,因为我遇到了一些 outofmemory
问题。 (应用程序非常繁重)。
在内存不足之前,war告诉我最大堆大小即将达到,tomcat 将达到 outofmemory
。几分钟后它崩溃了。
在我的 tomcat 中部署了几个 .war
。
这些应用程序位于 /deployments/xxx.war
.
ls
给我看
app1_0.1
app1_0.1.war
app2_0.1
app2_0.1.war
...
现在我的问题如下。我是否必须单独增加每个 .war 文件或同时增加整个 tomcat 的堆大小。
因为我没有找到一个命令来检查一个 java 应用程序的堆大小,但是当我想增加堆大小时,我似乎只找到这样的命令:java -Xms16m -Xmx64m ClassName
(在一个特定的应用程序上也是如此)。
当我在没有指定应用程序的情况下执行它时:
$ java -Xms16m -Xmx64m
Picked up JAVA_TOOL_OPTIONS: -Duser.home=/home/jboss -Duser.name=jboss
Usage: java [-options] class [args...]
(to execute a class)
or java [-options] -jar jarfile [args...]
(to execute a jar file)
where options include:
-d32 use a 32-bit data model if available
-d64 use a 64-bit data model if available
-server to select the "server" VM
The default VM is server,
because you are running on a server-class machine.
...
也尝试增加烫发尺寸:
-XX:MaxPermSize=256m
这会在您的应用需要时为您的堆大小增加 256mb。
查看有关 OutOfMemory
错误解决方案的相关 SE 问题
java.lang.OutOfMemoryError: Java heap space
MaxPermSize
标志已从 JDK 1.8 中移除。它被替换为 Metaspace
.
JDK8: 元space
在 JDK 8 中,classes 元数据现在存储在本机堆中,这个 space 称为 Metaspace
。在 JDK 8:
中为 Metaspace
添加了一些新标志
-XX:MetaspaceSize=<NNN>
分配给 class 元数据(以字节为单位)的初始数量 space(初始高水位线)可能会导致垃圾收集卸载classes.
-XX:MaxMetaspaceSize=<NNN>
其中是要为 class 元数据分配的最大 space 量(以字节为单位)。
看看甲骨文blog
在 VM 参数中使用 -d64
选项,因为您使用的是 64 位 OS。
您正在设置的 VM 参数对于 tomact 实例是全局的。
我在 docker 中使用 tomcat:8。 这是一些重要的设置(默认)。
$ java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'
Picked up JAVA_TOOL_OPTIONS: -Duser.home=/home/jboss -Duser.name=jboss
intx CompilerThreadStackSize = 0 {pd product}
uintx ErgoHeapSizeLimit = 0 {product}
uintx HeapSizePerGCThread = 87241520 {product}
uintx InitialHeapSize := 33554432 {product}
uintx LargePageHeapSizeThreshold = 134217728 {product}
uintx MaxHeapSize := 524288000 {product}
intx ThreadStackSize = 1024 {pd product}
intx VMThreadStackSize = 1024 {pd product}
现在我需要增加最大堆大小,因为我遇到了一些 outofmemory
问题。 (应用程序非常繁重)。
在内存不足之前,war告诉我最大堆大小即将达到,tomcat 将达到 outofmemory
。几分钟后它崩溃了。
在我的 tomcat 中部署了几个 .war
。
这些应用程序位于 /deployments/xxx.war
.
ls
给我看
app1_0.1
app1_0.1.war
app2_0.1
app2_0.1.war
...
现在我的问题如下。我是否必须单独增加每个 .war 文件或同时增加整个 tomcat 的堆大小。
因为我没有找到一个命令来检查一个 java 应用程序的堆大小,但是当我想增加堆大小时,我似乎只找到这样的命令:java -Xms16m -Xmx64m ClassName
(在一个特定的应用程序上也是如此)。
当我在没有指定应用程序的情况下执行它时:
$ java -Xms16m -Xmx64m
Picked up JAVA_TOOL_OPTIONS: -Duser.home=/home/jboss -Duser.name=jboss
Usage: java [-options] class [args...]
(to execute a class)
or java [-options] -jar jarfile [args...]
(to execute a jar file)
where options include:
-d32 use a 32-bit data model if available
-d64 use a 64-bit data model if available
-server to select the "server" VM
The default VM is server,
because you are running on a server-class machine.
...
也尝试增加烫发尺寸: -XX:MaxPermSize=256m
这会在您的应用需要时为您的堆大小增加 256mb。
查看有关 OutOfMemory
错误解决方案的相关 SE 问题
java.lang.OutOfMemoryError: Java heap space
MaxPermSize
标志已从 JDK 1.8 中移除。它被替换为 Metaspace
.
JDK8: 元space
在 JDK 8 中,classes 元数据现在存储在本机堆中,这个 space 称为 Metaspace
。在 JDK 8:
Metaspace
添加了一些新标志
-XX:MetaspaceSize=<NNN>
分配给 class 元数据(以字节为单位)的初始数量 space(初始高水位线)可能会导致垃圾收集卸载classes.
-XX:MaxMetaspaceSize=<NNN>
其中是要为 class 元数据分配的最大 space 量(以字节为单位)。
看看甲骨文blog
在 VM 参数中使用 -d64
选项,因为您使用的是 64 位 OS。
您正在设置的 VM 参数对于 tomact 实例是全局的。