Alo*_*lok 32 java jvm memory-management apache-spark spark-streaming
我正在监视OutOfMemoryException的spark执行器JVM.我使用Jconsole连接到执行程序JVM.以下是Jconsole的快照:

在图像中使用的内存显示为3.8G,提交的内存为8.6G,最大内存也是8.6G.任何人都可以解释使用和提交的内存或任何解释它的链接之间的区别.
ece*_*ulm 35
首先used < committed < max,所有这些的计量单位都是字节
-Xmsjava 命令的 cli 选项控制的。见2used < committedJVM 不需要从操作系统请求更多内存,因此可以保证它会成功。committed,那么 JVM 需要在创建对象之前从操作系统分配更多内存,这不能保证成功(操作系统也可能会耗尽内存)-Xmx。见2所以在OP的例子中
这意味着 JVM 可以在堆中分配最多 8.6G 的对象,这是有保证的,它不必向操作系统询问,因为它已经分配了。如果 JVM 在某个时候需要比这更多的内存,因为它需要分配更多的对象并且无法通过垃圾回收释放任何内存,那么它将因 OOM 而失败,因为 8.6G 已经是它允许请求的最大值(我猜因为它是从 开始的-Xmx8600M。
mus*_*ibs 23
来自Java Doc MemoryUsage,
getUsed是:
已用内存量,以字节为单位
getCommitted()
返回为Java虚拟机提交使用的内存量(以字节为单位).保证Java虚拟机使用的内存量.
GetMax的()
返回可用于内存管理的最大内存量(以字节为单位).如果未定义最大内存大小,则此方法返回-1.
如果内存量大于提交的内存量,则不保证此内存量可用于内存管理.即使已使用的内存量未超过此最大大小,Java虚拟机也可能无法分配内存.
| 归档时间: |
|
| 查看次数: |
24636 次 |
| 最近记录: |