Почему большие строковые данные журнала вызывают высокий уровень памяти прогресса Java?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему большие строковые данные журнала вызывают высокий уровень памяти прогресса Java?

Сообщение Anonymous »

проблема — почему большие строковые данные журнала приводят к переполнению памяти jvm?
Изображение

Изображение
  • проблема: 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 ГБ
Информация о куче jcmd GC:

Код: Выделить всё

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
heap_info

Код: Выделить всё

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

Heap Configuration:
MinHeapFreeRatio         = 40
MaxHeapFreeRatio         = 70
MaxHeapSize              = 5368709120 (5120.0MB)
NewSize                  = 2684354560 (2560.0MB)
MaxNewSize               = 2684354560 (2560.0MB)
OldSize                  = 2684354560 (2560.0MB)
NewRatio                 = 1
SurvivorRatio            = 8
MetaspaceSize            = 536870912 (512.0MB)
CompressedClassSpaceSize = 528482304 (504.0MB)
MaxMetaspaceSize         = 536870912 (512.0MB)
G1HeapRegionSize         = 0 (0.0MB)

Heap Usage:
New Generation (Eden + 1 Survivor Space):
capacity = 2415919104 (2304.0MB)
used     = 53123984 (50.66297912597656MB)
free     = 2362795120 (2253.3370208740234MB)
2.1989140245649548% used
Eden Space:
capacity = 2147483648 (2048.0MB)
used     = 31850616 (30.37511444091797MB)
free     = 2115633032 (2017.624885559082MB)
1.4831598848104477% used
From Space:
capacity = 268435456 (256.0MB)
used     = 21273368 (20.287864685058594MB)
free     = 247162088 (235.7121353149414MB)
7.924947142601013% used
To Space:
capacity = 268435456 (256.0MB)
used     = 0 (0.0MB)
free     = 268435456 (256.0MB)
0.0% used
concurrent mark-sweep generation:
capacity = 2684354560 (2560.0MB)
used     = 395406008 (377.0885543823242MB)
free     = 2288948552 (2182.911445617676MB)
14.73002165555954% used

85820 interned Strings occupying 9118248 bytes.

информация о nmt
подробнее см.
  • jcmd pid VM.native_memory подробно масштаб=MB > nmt.txt

Код: Выделить всё

Native Memory Tracking:

Total: reserved=7532MB, committed=6442MB
-                 Java Heap (reserved=5120MB, committed=5120MB)
(mmap: reserved=5120MB, committed=5120MB)

-                     Class (reserved=1202MB, committed=198MB)
(classes #29966)
(malloc=6MB #91853)
(mmap: reserved=1196MB, committed=192MB)

-                    Thread (reserved=632MB, committed=632MB)
(thread #629)
(stack:  reserved=630MB, committed=630MB)
(malloc=1MB #3768)
(arena=1MB #1253)

-                      Code (reserved=277MB, committed=191MB)
(malloc=34MB #42103)
(mmap: reserved=244MB, committed=158MB)

-                        GC (reserved=31MB, committed=31MB)
(malloc=16MB #2974)
(mmap: reserved=15MB, committed=15MB)

-                  Compiler (reserved=2MB, committed=2MB)
(malloc=2MB #4636)

-                  Internal (reserved=155MB, committed=155MB)
(malloc=155MB #52511)

-                    Symbol (reserved=31MB, committed=31MB)
(malloc=27MB #309643)
(arena=4MB #1)

-    Native Memory Tracking (reserved=9MB, committed=9MB)
(malloc=1MB #9371)
(tracking overhead=8MB)

-                   Unknown (reserved=73MB, committed=73MB)
(mmap: reserved=73MB, committed=73MB)

Virtual memory map:
подробные данные jmap
Изображение
информация pmap

Код: Выделить всё

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 КБ или более. Код похож на рисунок ниже.
    Изображение


Подробнее здесь: https://stackoverflow.com/questions/798 ... emory-high
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»