gpt4 book ai didi

java - hadoop 中明显的内存泄漏

转载 作者:可可西里 更新时间:2023-11-01 16:18:42 30 4
gpt4 key购买 nike

我正在运行的 hadoop 程序中存在明显的内存泄漏。具体来说,我收到消息: 超出错误 GC 开销限制随后是异常

attempt_201210041336_0765_m_0000000_1: Exception in thread "Tread for syncLogs" java.lang.OutOfMemoryError: GC overhead limit exceeded
attempt_201210041336_0765_m_0000000_1: at java.util.Vector.elements (Vector.java:292)
attempt_201210041336_0765_m_0000000_1: at org.apache.log4j.helpers.AppenderAtachableImpl.getAllAppenders(AppenderAttachableImpl.java:84
attempt_201210041336_0765_m_0000000_1: at org.apache.log4j.Category.getAllAppenders (Category.java:415)
attempt_201210041336_0765_m_0000000_1: at org.apache.hadoop.mapred.TaskLog.syncLogs(TaskLog.java:256)
attempt_201210041336_0765_m_0000000_1: at org.apache.hadoop.mapred.Child$3.run(Child.java:157)

我在初始试验中运行的数据集应该非常小,因此我不应该达到任何内存限制。更重要的是,我不想更改 hadoop 配置;如果程序不能在当前配置下运行,则程序需要重写。

谁能帮我弄清楚如何诊断这个问题?是否有命令行参数来获取内存使用情况的堆栈跟踪?还有其他方法可以跟踪此问题吗?

附言。我手写了错误消息,无法从有问题的系统复制粘贴。所以请忽略任何打字错误,因为这是我的愚蠢错误。

编辑:对此进行更新。我又跑了几次工作;虽然我总是得到 超出错误 GC 开销限制消息 我并不总是得到 log4j 的堆栈跟踪。所以问题可能不是 log4j,而是 log4j 恰好由于内存不足而失败...其他原因?

最佳答案

“GC overhead limit exceeded”可能意味着正在创建大量短生命期的对象,超过 GC 可以处理而不会消耗超过总时间的 98%。参见 this question关于如何使用 JProfiler 找到有问题的类和分配点.

免责声明:我公司开发了 JProfiler。

关于java - hadoop 中明显的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13647277/

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