UseConcMarkSweepGC vs UseParallelGC

У меня сейчас проблемы с очень долгим временем сборки мусора. пожалуйста, смотрите следующую диаграмму. Моя текущая установка такова, что я использую -Xms1g и -Xmx3g. мое приложение использует java 1.4.2. У меня не установлены флаги сборки мусора. судя по всему, 3гб мало и у меня действительно много объектов для сбора мусора.

вопрос:

следует ли мне изменить алгоритм сборки мусора? что мне использовать? лучше использовать -XX: + UseParallelGC или -XX: + UseConcMarkSweepGC

или я должен использовать эту комбинацию

-XX:+UseParNewGC -XX:+UseConcMarkSweepGC

, те, которые занимают память, в основном представляют данные отчетов, а не данные кеша. Кроме того, у машины 16 ГБ памяти, и я планирую увеличить кучу до 8 ГБ.

Какая разница между двумя вариантами, мне все еще трудно понять. машина имеет несколько процессоров. Я могу выдерживать удары продолжительностью до 5 секунд, но от 30 до 70 секунд действительно сложно.

Спасибо за помощь.

  Line 151493: [14/Jan/2012:11:47:48] WARNING ( 8710): CORE3283: stderr: [GC 1632936K->1020739K(2050552K), 1.2462436 secs]
    Line 157710: [14/Jan/2012:11:53:38] WARNING ( 8710): CORE3283: stderr: [GC 1670531K->1058755K(2050552K), 1.1555375 secs]
    Line 163840: [14/Jan/2012:12:00:42] WARNING ( 8710): CORE3283: stderr: [GC 1708547K->1097282K(2050552K), 1.1503118 secs]
    Line 169811: [14/Jan/2012:12:08:02] WARNING ( 8710): CORE3283: stderr: [GC 1747074K->1133764K(2050552K), 1.1017273 secs]
    Line 175879: [14/Jan/2012:12:14:18] WARNING ( 8710): CORE3283: stderr: [GC 1783556K->1173103K(2050552K), 1.2060946 secs]
    Line 176606: [14/Jan/2012:12:15:42] WARNING ( 8710): CORE3283: stderr: [Full GC 1265571K->1124875K(2050552K), 25.0670316 secs]
    Line 184755: [14/Jan/2012:12:25:53] WARNING ( 8710): CORE3283: stderr: [GC 2007435K->1176457K(2784880K), 1.2483770 secs]
    Line 193087: [14/Jan/2012:12:37:09] WARNING ( 8710): CORE3283: stderr: [GC 2059017K->1224285K(2784880K), 1.4739291 secs]
    Line 201377: [14/Jan/2012:12:51:08] WARNING ( 8710): CORE3283: stderr: [Full GC 2106845K->1215242K(2784880K), 30.4016208 secs]


xaa:1: [11/Oct/2011:16:00:28] WARNING (17125): CORE3283: stderr: [Full GC 3114936K->2985477K(3114944K), 53.0468651 secs] --> garbage collection occurring too often as noticed in the time. garbage being collected is quite low and if you would notice is quite close the the heap size. during the 53 seconds, this is equivalent to a pause.
xaa:2087: [11/Oct/2011:16:01:35] WARNING (17125): CORE3283: stderr: [Full GC 3114943K->2991338K(3114944K), 58.3776291 secs]
xaa:3897: [11/Oct/2011:16:02:33] WARNING (17125): CORE3283: stderr: [Full GC 3114940K->2997077K(3114944K), 55.3197974 secs]
xaa:5597: [11/Oct/2011:16:03:00] WARNING (17125): CORE3283: stderr: [Full GC[Unloading class sun.reflect.GeneratedConstructorAccessor119]
xaa:7936: [11/Oct/2011:16:04:36] WARNING (17125): CORE3283: stderr: [Full GC 3114938K->3004947K(3114944K), 55.5269911 secs]
xaa:9070: [11/Oct/2011:16:05:53] WARNING (17125): CORE3283: stderr: [Full GC 3114937K->3012793K(3114944K), 70.6993328 secs]
27
задан Ravindra babu 2 March 2016 в 13:31
поделиться

2 ответа

Ваша куча слишком мала. Пауза такая большая, потому что она занята многократным сканированием всей кучи, отчаянно ища что-то, что можно собрать.

Вам необходимо выполнить 1 или, возможно, несколько из следующих действий:

  • найти и исправить утечку памяти
  • настроить приложение на использование меньшего количества памяти
  • configure JVM использует большую кучу

Вы по какой-то причине привязаны к 1.4.2? Реализация GC действительно продвинулась с тех пор, поэтому вы должны рассмотреть возможность обновления, если это возможно. Я понимаю, что это может быть нетривиальным мероприятием, но все равно стоит задуматься.

4
ответ дан 28 November 2019 в 05:54
поделиться

Шаг 1:

  1. Убедитесь, что вы установили достаточно памяти для своего приложения.
  2. Убедитесь, что в вашем приложении нет утечек памяти. Eclipse Memory Analyzer Tool или visualvm поможет вам определить утечки в вашем приложении.

Шаг 2:

Если у вас нет проблем с шагом 1 в отношении утечек памяти, обратитесь к странице документации оракула о вариантах использования для конкретного алгоритма сборки мусора в разделе «Сборщик мусора Java» и статье gctuning .

Поскольку вы решили настроить большие кучи (> = 8 ГБ), G1GC должен нормально работать для вас. Обратитесь к этому связанному вопросу SE о параметрах тонкой настройки:

Java 7 (JDK 7) сборка мусора и документация по G1

1
ответ дан 28 November 2019 в 05:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: