我正在阅读关于“星火中的垃圾收集调优:比尔·钱伯斯和马提伊·扎哈里亚的最终指南”的文章。本章主要基于火花文件。然而,作者扩展了文档,并举例说明了如何处理太多的次要集合,但没有处理太多的主要集合。
官方文件和这本书都指出:
如果有太多的小集合,但没有很多主要的GC,为伊甸园分配更多的内存将有所帮助。您可以将伊甸园的大小设置为对每个任务需要多少内存的高估。如果Eden的大小被确定为E,那么您可以使用选项-Xmn= 4/3 *E来设置年轻一代的大小(增加4/3是为了计算幸存者区域所使用的空间)。(见这里)
这本书提供了一个例子(火花:最终指南,第一版,第324页):
如果您的任务是从HDFS读取数据,则可以使用从HDFS读取的数据块的大小来估计任务使用的内存量。注意,解压缩块的大小通常是块大小的两到三倍。因此,如果您希望有三个或四个任务的工作空间,而HDFS块大小为128 MB,我们可以估计Eden的大小为43,128 MB。
假设每个未压缩的块都使用512 MB,并且我们有4任务,并且我们通过4/3进行扩展,我不太明白如何才能给出Eden内存43,128 MB的估计值。
我宁愿回答,考虑到书中的假设,~3 GB对伊甸园来说应该足够了。
有人能解释一下应该如何计算这一估计吗?
发布于 2018-05-18 10:03:53
好吧,我想新的星火博士说得很清楚:
例如,如果您的任务是从HDFS读取数据,则可以使用从HDFS读取的数据块的大小来估计任务使用的内存量。注意,解压缩块的大小通常是块大小的2或3倍。因此,如果我们希望有3或4个任务的工作空间,而HDFS块大小为128 MB,则可以估计Eden的大小为4*3*128 MB。
所以,这是4*3*128 MB,而不是书中所说的(即43,128 MB)。
https://stackoverflow.com/questions/49954518
复制相似问题