gpt4 book ai didi

java - Hadoop:堆空间和gc问题

转载 作者:可可西里 更新时间:2023-11-01 14:21:52 25 4
gpt4 key购买 nike

我目前正在开展一个项目,我需要为我的 map task 提供一个内存结构。我做了一些计算,我可以说每个 map task 不需要超过 600MB 的内存。但问题是,一段时间后我遇到了 Java 堆空间问题或 gc 开销限制。我不知道这怎么可能。

这里有更多的细节。我有两个带 12GB 内存的四核系统。所以这意味着我最多可以同时运行 8 个 map task 。我正在 build 一棵树,所以我有一个迭代算法,可以为每个树级别执行 map-reduce 作业。我的算法适用于小型数据集,但对于中型数据集存在堆空间问题。我的算法达到某个树级别,然后超出堆空间,或者出现 gc 开销问题。那时,我做了一些计算,发现每个任务不需要超过 100MB 的内存。所以对于 8 个任务,我使用了大约 800MB 的内存。我不知道发生了什么。我什至用这些行更新了我的 hadoop-env.sh 文件:

   export HADOOP_HEAPSIZE=8000
export HADOOP_OPTS=-XX:+UseParallelGC

问题是什么?这些行是否会覆盖我系统的 java 选项?使用 parallelGC 是我在 Internet 上看到的,并且在具有多个内核时推荐使用。

     edits

好的,这里是监控堆空间和总内存后的一些编辑。同时运行 6 个任务时,我消耗了大约 3500MB 的 RAM。这意味着 jobtracker、tasktracker、namenode、datanode、secondary namenode 我的操作系统和 6 个任务都使用 3500 个 RAM,这是一个非常合乎逻辑的大小。那么为什么我会得到 gc 开销限制?我对每个树级别都遵循相同的算法。唯一改变的是每个树级别中的节点数。在树级别有很多节点,不会给我的算法增加太多开销。那么,为什么 gc 无法正常工作?

最佳答案

如果最大内存大小没有改变,它将是主内存的 1/4,即大约 3 GB 加上一些非堆使用的开销可能是 3.5 GB。

我建议你试试

export HADOOP_OPTS="-XX:+UseParallelGC -Xmx8g"

将最大内存设置为 8 GB。


默认情况下,最大堆大小是内存的 1/4(除非您在 Windows 上运行 32 位 JVM)。因此,如果忽略最大堆大小,它仍将为 3 GB。

无论您使用一个 GC 还是另一个,当您用完内存时都没有太大区别。

我建议您使用 -XX:+HeapDumpOnOutOfMemoryError 进行堆转储,然后在分析器中读取它,例如VisualVM 查看它为什么使用这么多内存。

关于java - Hadoop:堆空间和gc问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9703436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com