root@app-live-admin-service-prod-gzhy-idc-1283210-ml75f:~# jcmd 115 GC.heap_info
115:
par new generation total 2359296K, used 406730K [0x00000006a0800000, 0x0000000740800000, 0x0000000740800000)
eden space 2097152K, 18% used [0x00000006a0800000, 0x00000006b8266b70, 0x0000000720800000)
from space 262144K, 7% used [0x0000000730800000, 0x0000000731acbd30, 0x0000000740800000)
to space 262144K, 0% used [0x0000000720800000, 0x0000000720800000, 0x0000000730800000)
concurrent mark-sweep generation total 2621440K, used 362690K [0x0000000740800000, 0x00000007e0800000, 0x00000007e0800000)
Metaspace used 180048K, capacity 196318K, committed 196608K, reserved 1224704K
class space used 19486K, capacity 22194K, committed 22272K, reserved 1048576K
pmap info:pmap -x pid > pmap1.txt
pmap info sort :sort -n -k 3 -r pmap1.txt -o pmap2.txt
see the addressinfo :tail -c +$((0x00007f8eec000000+1)) /proc/${pid}/mem|head -c $((11616*1024))|strings > data10.txt
pmap1.txt
pmap2.txt
data10.txt
много информации о памяти связано с большими строковыми данными журнала (журнал может быть опубликован за несколько дней до этого). Итак, я делаю версию, которая не записывает большие строковые данные, тогда память в норме.
Я хочу знать, почему большие строковые данные журнала приводят к увеличению памяти jvm? И в какой области памяти возникает высокий уровень (адрес журнала не указан в информации nmt)?
Большая строка данных журнала означает, что строка журнала имеет размер 20 КБ или более. Код похож на рисунок ниже.
проблема — почему большие строковые данные журнала приводят к переполнению памяти jvm? [img]https://i.sstatic.net/Z44baqqm.png[/img]
[img]https://i.sstatic.net/YFLvsBSx.png[/img]
[list] [*]проблема: Java-процесс со временем использует все больше и больше памяти. [*]аргумент jvm:java -Xmx5120M -Xms5120M -XX:NewRatio=1 -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/log -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -Xloggc:/data/log/gc-%t.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=20m -XX:ErrorFile=/data/log/hs_err_%p.log -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly -XX:AutoBoxCacheMax=20000 -XX:-UseBiasedLocking -XX:NativeMemoryTracking=detail -jar /data/app/app-live-admin-service/app_live_admin_services.jar [*]jdkversion:openjdk версия "1.8.0_412" [*]память докера 8 ГБ [/list] Информация о куче jcmd GC: [code]root@app-live-admin-service-prod-gzhy-idc-1283210-ml75f:~# jcmd 115 GC.heap_info 115: par new generation total 2359296K, used 406730K [0x00000006a0800000, 0x0000000740800000, 0x0000000740800000) eden space 2097152K, 18% used [0x00000006a0800000, 0x00000006b8266b70, 0x0000000720800000) from space 262144K, 7% used [0x0000000730800000, 0x0000000731acbd30, 0x0000000740800000) to space 262144K, 0% used [0x0000000720800000, 0x0000000720800000, 0x0000000730800000) concurrent mark-sweep generation total 2621440K, used 362690K [0x0000000740800000, 0x00000007e0800000, 0x00000007e0800000) Metaspace used 180048K, capacity 196318K, committed 196608K, reserved 1224704K class space used 19486K, capacity 22194K, committed 22272K, reserved 1048576K [/code] heap_info [code]Attaching to process ID 115, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.412-b08
using parallel threads in the new generation. using thread-local object allocation. Concurrent Mark-Sweep GC
Virtual memory map: [/code] подробные данные jmap [img]https://i.sstatic.net/2f30gJQM.png[/img] информация pmap [code]pmap info:pmap -x pid > pmap1.txt pmap info sort :sort -n -k 3 -r pmap1.txt -o pmap2.txt see the addressinfo :tail -c +$((0x00007f8eec000000+1)) /proc/${pid}/mem|head -c $((11616*1024))|strings > data10.txt [/code] pmap1.txt pmap2.txt data10.txt [img]https://i.sstatic.net/JYJkE52C.png[/img]
[img]https://i.sstatic.net/TMOXbTaJ.png[/img]
[list] [*]много информации о памяти связано с большими строковыми данными журнала (журнал может быть опубликован за несколько дней до этого). Итак, я делаю версию, которая не записывает большие строковые данные, тогда память в норме. [*]Я хочу знать, почему большие строковые данные журнала приводят к увеличению памяти jvm? И в какой области памяти возникает высокий уровень (адрес журнала не указан в информации nmt)? [*]Большая строка данных журнала означает, что строка журнала имеет размер 20 КБ или более. Код похож на рисунок ниже. [img]https://i.sstatic.net/f9bTec6t.png[/img] [/list]