В настоящее время я работаю над проектом, в котором мне нужно иметь структуру памяти для задачи карты.Я сделал некоторые расчеты, и я могу сказать, что мне не нужно более 600 МБ памяти для каждой задачи карты.Но дело в том, что через некоторое время у меня возникают проблемы с пространством кучи Java или ограничением накладных расходов gc.Я не знаю, как это возможно.
Вот еще несколько деталей.У меня две четырехъядерные системы с 12 ГБ оперативной памяти.Таким образом, это означает, что у меня может быть одновременно запущено до 8 картографических задач.Я строю дерево, поэтому у меня есть итеративный алгоритм, который выполняет работу по уменьшению карты для каждого уровня дерева.Мой алгоритм отлично работает для небольших наборов данных, но для среднего набора данных есть проблемы с пространством кучи.Мой алгоритм достигает определенного уровня дерева и затем выходит из кучи или имеет проблемы с gc.В этот момент я произвел некоторые расчеты и увидел, что для каждой задачи не требуется более 100 МБ памяти.Так что для 8 задач я использую около 800 МБ памяти.Я не знаю, что происходит.Я даже обновил свой файл hadoop-env.sh следующими строками:
export HADOOP_HEAPSIZE=8000
export HADOOP_OPTS=-XX:+UseParallelGC
В чем проблема?Эти строки даже переопределяют параметры Java для моей системы?Использование параллель - это то, что я видел в Интернете, и это было рекомендовано при наличии нескольких ядер.
edits
Хорошо, вот некоторые правки после мониторинга пространства кучи и общего объема памяти.Я использую около 3500 МБ ОЗУ при выполнении 6 задач одновременно.Это означает, что JobTracker, TaskTracker, namenode, datanode, вторичный namenode моей операционной системы и 6 задач используют 3500 RAM, что является очень логичным размером.Итак, почему я получаю ограничение на накладные расходы gc?Я следую одному и тому же алгоритму для каждого уровня дерева.Единственное, что меняется, - это количество узлов на каждом уровне дерева.Наличие множества узлов на уровне дерева не добавляет таких издержек для моего алгоритма.Так почему же gc не работает хорошо?