Java Playwright выдает java.lang.OutOfMemoryError: пространство кучи Java закрывает объект Playwright
Я новичок в драматургии. Я разработал простой код, в котором есть 2 потока, каждый поток имеет свой собственный объект Playwright вместе с объектом Browser + объектом Page. Я использую версию 1.18 Playwright для Java.
При вызове хука выключения я попытаюсь закрыть ресурсы, созданные в каждом потоке, следующим образом.
- Закрытие объекта страницы
- Закрытие объекта браузера
- Закрытие объекта Драматург
Когда я запускаю код только с одним объектом Playwright, он работает как шарм.
Но когда создаются два или более объекта Playwrights, возникает исключение.
Как видите, исключение возникает, когда объект двух драматургов имеет значение close().
Я создаю, как сказано выше, объект Playwright для каждого потока.
И я анализирую файл hprof, я вижу такие вещи.
Использование Java 8.
При запуске процесса с 20 ГБ оперативной памяти двухстраничный объект зависает, как вы можете видеть здесь, зависание занимает более 10 минут, я пытаюсь даже дольше, даже 2 или 3 часа, и продолжает зависать.
При запуске с флагом -XX:+PrintGCDetails я вижу
Что на самом деле означает GC (сбой распределения)? Ошибка выделения GC означает, что сборщик мусора не может достаточно быстро перемещать объекты из молодого поколения в старое поколение, потому что ему не хватает памяти в старом поколении. Это может привести к замедлению работы приложения.
А 20 гб оперативной памяти мало?
Java HotSpot(TM) 64-Bit Server VM (25.181-b13) for windows-amd64 JRE (1.8.0_181-b13), built on Jul 7 2018 04:01:33 by "java_re" with MS VC++ 10.0 (VS2010)
Memory: 4k page, physical 66829096k(43322092k free), swap 87632988k(48322016k free)
CommandLine flags: -XX:+HeapDumpOnOutOfMemoryError -XX:InitialHeapSize=21474836480 -XX:MaxHeapSize=21474836480 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UnlockCommercialFeatures -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
4.555: [GC (Metadata GC Threshold) [PSYoungGen: 3460646K->54963K(6116864K)] 3460646K->55051K(20098048K), 0.0298597 secs] [Times: user=0.14 sys=0.00, real=0.03 secs]
4.585: [Full GC (Metadata GC Threshold) [PSYoungGen: 54963K->0K(6116864K)] [ParOldGen: 88K->51554K(13981184K)] 55051K->51554K(20098048K), [Metaspace: 21074K->21074K(1067008K)], 0.0419001 secs] [Times: user=0.31 sys=0.06, real=0.04 secs]
5.665: [GC (Metadata GC Threshold) [PSYoungGen: 562473K->15549K(6116864K)] 614028K->67112K(20098048K), 0.0115794 secs] [Times: user=0.05 sys=0.00, real=0.01 secs]
5.677: [Full GC (Metadata GC Threshold) [PSYoungGen: 15549K->0K(6116864K)] [ParOldGen: 51562K->24900K(13981184K)] 67112K->24900K(20098048K), [Metaspace: 34762K->34762K(1079296K)], 0.0278415 secs] [Times: user=0.09 sys=0.00, real=0.03 secs]
9.262: [GC (Metadata GC Threshold) [PSYoungGen: 592661K->37509K(6116864K)] 617561K->62456K(20098048K), 0.0122229 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
9.275: [Full GC (Metadata GC Threshold) [PSYoungGen: 37509K->0K(6116864K)] [ParOldGen: 24947K->49005K(13981184K)] 62456K->49005K(20098048K), [Metaspace: 58039K->58039K(1099776K)], 0.1155353 secs] [Times: user=0.47 sys=0.01, real=0.12 secs]
225.878: [GC (Allocation Failure) [PSYoungGen: 5076063K->67377K(6116864K)] 5125069K->1909648K(20098048K), 0.6868276 secs] [Times: user=1.45 sys=0.36, real=0.68 secs]
С кучей 35 ГБ он зависает более 130 минут и рассчитывает на метод Browser->shutdown. Вы можете увидеть время журнала по сравнению с системным временем
gc_memory_logs
Java HotSpot(TM) 64-Bit Server VM (25.181-b13) for windows-amd64 JRE (1.8.0_181-b13), built on Jul 7 2018 04:01:33 by "java_re" with MS VC++ 10.0 (VS2010)
Memory: 4k page, physical 66829096k(47886792k free), swap 87632784k(62025452k free)
CommandLine flags: -XX:+HeapDumpOnOutOfMemoryError -XX:InitialHeapSize=37580963840 -XX:MaxHeapSize=37580963840 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UnlockCommercialFeatures -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
5.257: [GC (Metadata GC Threshold) [PSYoungGen: 4037245K->61178K(10704384K)] 4037245K->61226K(35171328K), 0.0350905 secs] [Times: user=0.08 sys=0.03, real=0.04 secs]
5.292: [Full GC (Metadata GC Threshold) [PSYoungGen: 61178K->0K(10704384K)] [ParOldGen: 48K->57708K(24466944K)] 61226K->57708K(35171328K), [Metaspace: 21090K->21090K(22528K)], 0.0355541 secs] [Times: user=0.11 sys=0.03, real=0.04 secs]
6.686: [GC (Metadata GC Threshold) [PSYoungGen: 642288K->18308K(10704384K)] 699997K->76025K(35171328K), 0.0102924 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
6.696: [Full GC (Metadata GC Threshold) [PSYoungGen: 18308K->0K(10704384K)] [ParOldGen: 57716K->32289K(24466944K)] 76025K->32289K(35171328K), [Metaspace: 34833K->34833K(36864K)], 0.0287175 secs] [Times: user=0.14 sys=0.00, real=0.03 secs]
10.652: [GC (Metadata GC Threshold) [PSYoungGen: 1192822K->46665K(10704384K)] 1225111K->78994K(35171328K), 0.0132830 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
10.666: [Full GC (Metadata GC Threshold) [PSYoungGen: 46665K->0K(10704384K)] [ParOldGen: 32329K->63570K(24466944K)] 78994K->63570K(35171328K), [Metaspace: 57979K->57979K(59392K)], 0.0875398 secs] [Times: user=0.48 sys=0.00, real=0.09 secs]
74.839: [GC (Allocation Failure) [PSYoungGen: 9175552K->112225K(10704384K)] 9239122K->175875K(35171328K), 0.0579027 secs] [Times: user=0.11 sys=0.02, real=0.06 secs]
Когда я закрыл intellijIdea с помощью System.exit(0) 5 драматургов, я не знаю, почему с CMD много проблем с -Xmx5g.