JVM 默认设置: -Xms32m -Xmx128m -Xss128k -Xoss128k -XX:ThreadStackSize=128
我需要更改默认堆设置并希望增加 64GB 服务器的堆内存。
- 更改默认设置时可能会出现哪些问题
- 增加 jvm 堆内存的限制是多少
如何更改jvm的这些参数
最佳答案
How do I change JVM default heap settings?
这取决于您所说的“默认”设置的含义。
如果您指的是由
java
命令实现的“默认”设置,那么您可以使用-Xmx覆盖默认设置。 ..
(等等)命令行选项,如 @BetaRide 所描述。但是,您无法更改java
命令的默认值及其计算方式。如果您指的是某些基于 Java 的应用程序使用的“默认”设置,则没有通用答案。不同的应用程序以不同的方式指定要使用的堆大小。并提供不同的是改变堆大小。一种常见的机制是设置 $JAVA_OPTS 环境变量,但这绝不是通用的。检查应用程序文档或阅读启动脚本。
What problems can occur when the default settings are changed?
如果堆太小,可能会导致应用程序遇到
OutOfMemoryError
问题。根据应用程序编写的好坏,它要么会出错(这是好事),要么进入“死亡螺旋”,要么进入不确定状态。 (如果 OOME 发生在工作线程上并且线程终止,则最后一种情况会发生。解决方案是添加一个默认的未捕获异常处理程序,该处理程序特别会在看到Error< 时导致应用程序退出
或Error
子类。)如果您使堆显着大于物理内存,那么在执行垃圾回收时,您将面临 JVM thrash 虚拟内存的风险。这会导致性能不佳,并且在某些操作系统上可能会导致操作系统终止您的应用程序;例如请参阅https://unix.stackexchange.com/questions/479575/why-is-the-linux-oom-killer-terminating-my-programs
过大的堆也会导致垃圾收集期间无响应...仅仅是因为 GC(或整个 GC)的某些阶段会“停止世界”,并且停止的时间较长更大的堆。 (在某些 Java GC 中,重要的是"new"空间的大小。在其他情况下,重要的是整个堆大小。有关更多详细信息,请参阅有关 GC Ergonomics 的 Oracle 文档...取决于您的 Java版本。)
What is the limit to increase JVM heap memory?
有许多相关限制。
您的平台的处理器架构和操作系统可能会限制您。例如,在 32 位 intel 平台上,JVM 进程的最大可寻址内存将为 2^32 字节...并且操作系统将保留大量内存用于其自身目的。
操作系统通常会根据可用物理内存和交换空间的数量来限制所有进程的虚拟内存总使用量。
某些操作系统(和容器)允许管理员(或用户)对一个进程或一组进程使用的虚拟内存进行外部限制。
与上述无关,还有我上面提到的实际限制。 (太大的堆可能会导致响应能力、虚拟内存抖动……以及 OOM killer 等问题。)
关于java - 如何更改 JVM 默认堆设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34217508/