У меня есть приложение Java, работающее в автономной JVM. Приложение прослушивает данные по одному или нескольким сокетам, ставит в очередь данные и имеет запланированные потоки, вытягивающие данные из очереди и сохраняющие его. Данные широкие, более 700 элементов данных на запись, хотя все элементы данных являются маленькими строками, целыми или длинными.Высокие объекты Скопируйте время, приводящее к длинным сборкам мусора с помощью G1GC
Приложение работает плавно в течение периодов времени, иногда от 30 минут до часа, но затем мы испытываем одну или несколько длинных пауз для сбора мусора. Большая часть времени паузы расходуется на время копирования объекта. Время sys также велико по сравнению с другими коллекциями.
Здесь детали JVM:
java version "1.7.0_03"
Java(TM) SE Runtime Environment (build 1.7.0_03-b04)
Java HotSpot(TM) 64-Bit Server VM (build 22.1-b02, mixed mode)
Вот варианты JVM:
-XX:MaxPermSize=256m -XX:PermSize=256m -Xms3G -Xmx3G -XX:+UseG1GC -XX:-UseGCOverheadLimit
Процесс набор задач 4 ядер (все на одной и той же розетки), но едва ли с использованием 2 из них. Все процессы на этом ящике привязаны к их собственным ядрам (с 0 ansd 1 не используется). Машина имеет много свободной памяти (20 + G), а верхний показывает процесс с использованием 2.5G памяти RES.
Вот некоторые из выхода журнала гх ...
[Object Copy (ms): 2090.4 2224.0 2484.0 2160.1 1603.9 2071.2 887.8 1608.1 1992.0 2030.5 1692.5 1583.9 2140.3 1703.0 2174.0 1949.5 1941.1 2190.1 2153.3 1604.1 1930.8 1892.6 1651.9
[Eden: 1017M(1017M)->0B(1016M) Survivors: 7168K->8192K Heap: 1062M(3072M)->47M(3072M)]
[Times: user=2.24 sys=7.22, real=2.49 secs]
Любые идеи о том, почему объект Время копирования и SYS время настолько высоки, и как ее исправить? В журнале много коллекций мусора с почти одинаковыми размерами Eden/Survivors/Heap, которые занимают всего 10 или 20 мс.
Благодарим вас за ввод. Да, он нужен 3G. Частота сбора будет основываться на том, насколько быстро регионы заполняются. G1GC специально разработан для больших куч и является инкрементным коллектором. 'Первый фокус G1 - это решение для пользователей, запускающих приложения, которым требуются большие кучи с ограниченной задержкой GC.Это означает, что размер кучи составляет около 6 ГБ или более, а стабильное и предсказуемое время паузы ниже 0,5 секунды. ' – user2992915
Попробуйте« обнулить »объекты после их обработки, а затем обратив особое внимание на дешифрующие структуры. Если вы можете полностью разрушить все структуры, это может помочь GC очистить части до/или без каких-либо серьезных пауз. –