![Tomcat环境变量的完美组合是什么?](https://linux22.com/image/69443/Tomcat%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%E7%9A%84%E5%AE%8C%E7%BE%8E%E7%BB%84%E5%90%88%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F%20.png)
我在 apache-tomcat 服务器中托管了一个应用程序 UI。我已在 bin/setenv.sh 文件中将环境变量设置为:
CATALINA_OPTS="-server -Xms256m -Xmx512m -XX:PermSize=512m -XX:MaxPermSize=1024m
每次我执行一个巨大的操作时(例如:使用应用程序中的所有数据生成报告),'Java堆空间'异常即将到来,然后后续应用程序将无法正常工作。我必须再次重新启动服务器。
我的问题是:
什么是-Xms 和-Xmx?
我应该为它们设置什么值以避免 JavaHeapSpace 异常?
它们的最大值和最小值是多少?
如果取决于服务器配置,我在下面分享了我的服务器配置。请提出建议。我真的很想避免这个问题。
我的服务器配置:RAM:8GB,处理器:八核,硬盘:500GB
如果你们需要任何相关信息,请告诉我。
答案1
什么是-Xms 和-Xmx?
Xms256m ---> 为应用程序选择较低的初始 JVM 堆大小。所以,XMS指定将用于启动服务器的内存量(以兆字节为单位)。
Xmx512m ---> 选择应用程序允许的最大 JVM 堆大小。所以,Xmx指定专用于运行服务器的最大内存量(以兆字节为单位)。
我应该为它们设置什么值以避免 JavaHeapSpace 异常?
这不取决于您的系统配置,而是取决于您要执行的应用程序类型。所以,所有这些都是您提供的不必要的细节。您应该关心您的 JVM 是 32 位还是 64 位。就像,我有这样的 JVM 配置来执行我的本地最小自然应用程序 ---> -J-Xms100m -J-Xmx200m -J-XX:PermSize=100m
。
它们的最大值和最小值是多少?
这受到您的系统和 JVM 的特性的限制。
32 位 JVM 的最大理论堆限制为 4G。由于各种额外的限制,例如可用交换、内核地址空间使用、内存碎片和虚拟机开销,实际上该限制可以低得多。在大多数现代 32 位 Windows 系统上,最大堆大小范围为 1.4G 到 1.6G。在 32 位 Solaris 内核上,地址空间限制为 2G。在运行 32 位 VM 的 64 位操作系统上,最大堆大小可能更高,在许多 Solaris 系统上接近 4G。
如果您的应用程序需要非常大的堆,您应该在支持 64 位应用程序的操作系统版本上使用 64 位 VM。
查看这个链接了解更多