2016-07-12 2 views
0

Я использую Graphhopper на своем местном, чтобы получить направление движения между двумя широтами/долготами. Все было хорошо, и я получал результаты менее чем за 100 мс, когда загружал данные только для одной страны. Теперь я загрузил набор данных в Asia, и результат стал слишком медленным (в некоторых случаях более 10 секунд). И теперь для некоторых маршрутов я получаю эту ошибку:ОШИБКА com.graphhopper.http.GHErrorHandler - превышен верхний предел GC

ERROR com.graphhopper.http.GHErrorHandler - GC overhead limit exceeded, 
       java.lang.OutOfMemoryError: GC overhead limit exceeded 

Моя цель состоит в том, чтобы загрузить все мировые данные и получить результаты менее чем за 1 секунду. Какую оптимизацию производительности я могу сделать для достижения этой цели? В настоящее время я использую систему с 8 GB RAM. Я открыт для увеличения ОЗУ, если это необходимо для оптимизации производительности.

+0

Какая у вас настройка доступа к данным и насколько велика созданная папка-хранилище (или отправляйте полный файл config.properties). Используйте этот размер + 10% для настройки Xmx & Xms JVM. – Karussell

+0

. если вам нужны быстрые результаты, вы должны ** не использовать использование сопоставления памяти (MMAP_SYNC_STORE) – Karussell

+0

Привет, спасибо за ответ. Увеличение Xmx & Xms помогает. Так примерно, сколько физической памяти потребуется для работы со всеми мировыми данными? Каковы рекомендуемые настройки в этом случае? – Rahul

ответ

0

Сообщение «Превышение предельных значений« GC »означает, что JVM тратит большую часть времени на сборку мусора. Это обычно означает, что куча близка к полной.

Есть два способа подойти к этому:

  • Вы можете увеличить размер кучи Java. Однако, если вы слишком сильно увеличиваете размер кучи, вы можете использовать больше виртуальной памяти, чем у вас есть физическая оперативная память. Это может подтолкнуть вашу систему к режиму, в котором виртуальная машина бьет; то есть большую часть времени он проводит по перестановке страниц между ОЗУ и вашим устройством подкачки.

  • Вы можете найти способы уменьшить использование памяти. Теперь я не знаю, что такое graphhopper, но похоже, что это приложение, которое работает, загружая большие графики в память. Если это так, то может быть трудно сократить использование памяти ... без перезаписи приложения.

В конечном счете, любое приложение, которое загружает большие наборы данных в память будет иметь проблемы масштабирования за пределы объема физической памяти, которые вы имеете в наличии.

+0

В настоящее время это моя настройка JAVA_OPTS = -Xmx4000m -Xms4000m-server. У них есть демонстрационный сервер, в котором одни и те же маршруты идут менее чем за 1 секунду. Проверьте это: https://graphhopper.com/maps/. И когда я пытаюсь запустить его на своем сервере, это слишком долго. Кроме того, я отключил обмен. Я попытаюсь проверить с настройкой размера кучи. – Rahul

Смежные вопросы