Java 主机上的可用内存减少,并从堆转储中看到大量无法访问的对象
我的java服务运行在一个16GB的RAM主机上,Java 主机上的可用内存减少,并从堆转储中看到大量无法访问的对象,java,memory,garbage-collection,jvm,jvm-arguments,Java,Memory,Garbage Collection,Jvm,Jvm Arguments,我的java服务运行在一个16GB的RAM主机上,-Xms和-Xmx设置为8GB。主机正在运行一些其他进程 我注意到我的服务随着时间的推移消耗了更多的内存。我在主机上运行了这个命令ps aux | awk'{print$6/1024“MB\t\t“$11}”| sort-n,并记录了java服务的内存使用情况。当服务启动时,它使用了大约8GB的内存(如-Xms和-Xmx设置为8GB),但一周后,它使用了大约9GB+的内存。它每天多消耗大约100MB内存 我比较了堆转储,没有发现任何内存泄漏。在重
-Xms和-Xmx
设置为8GB。主机正在运行一些其他进程
我注意到我的服务随着时间的推移消耗了更多的内存。我在主机上运行了这个命令ps aux | awk'{print$6/1024“MB\t\t“$11}”| sort-n
,并记录了java服务的内存使用情况。当服务启动时,它使用了大约8GB的内存(如-Xms和-Xmx
设置为8GB),但一周后,它使用了大约9GB+的内存。它每天多消耗大约100MB内存
我比较了堆转储,没有发现任何内存泄漏。在重新启动java服务之前/之后,堆内存使用情况没有太大差异。然而,我注意到相当多的不可到达的对象。我比较了两个堆转储,发现由于不可访问的对象,保留的堆大小增加了约500MB
所以我猜有些对象在年轻的空间中没有GCed,或者被移动到旧的空间而没有GCed,因为完整的GC还没有启动
我的问题是
jmap-heap
中,我看到MaxNewSize
设置为4GB,而NewSize
设置为1MB。它是否会导致GC中出现问题,留下大量无法访问的对象?一些设置是盲目设置的(从一些默认值)如果您对内存需求的增加没有有效的解释(不断增长的数据库将是有效的解释),那么您的应用程序可能有9/10的内存泄漏。另一个错误可能是JVM中的错误或硬件错误(不太可能)。我建议您等到应用程序崩溃后再阅读错误日志^^PS您可能会尝试强制执行崩溃。如果您无法从GC日志文件中的所有详细信息中回答这个问题,我想知道您为什么在创建这些详细日志时浪费资源。问题是,它当前是如何编写的,陈述3个不同的问题:1)进程内存占用的增长;2) JVM选项的使用;3) 堆转储中无法访问的对象。请不要一次问多个问题。你说“哪个GC日志”是什么意思?您的JVM创建了多少?大多数发布的JVM选项专用于GC日志记录。显然,你喜欢告诉JVM“尽可能多的日志”,但甚至不要考虑查看结果(或者用你的问题发布)……你已经配置了<代码> MGGCPAUMILILIS=75 /代码>,所以你可以检查暂停是否处于这个数量级,所以GC不会回收更多的内存来保持这个暂停时间目标。这不是问题,这些对象仍然可以在以后的GC周期中回收。在最坏的情况下,它将在内存耗尽之前执行完整的GC。
-Xms8G -Xmx8G
-XX:+UseG1GC
-XX:+DisableExplicitGC
-XX:MaxGCPauseMillis=75
-XX:MetaspaceSize=128m
-XX:MaxMetaspaceSize=1024m
-XX:ReservedCodeCacheSize=256m
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-XX:+PrintTenuringDistribution
-XX:+PrintGCApplicationConcurrentTime
-XX:+PrintGCApplicationStoppedTime
-XX:+PrintSafepointStatistics
-XX:+CITime
-XX:+PrintPromotionFailure
-XX:+PrintGCCause
-XX:+PrintJNIGCStalls
-XX:+PrintHeapAtGC
-XX:GCLogFileSize=100M
-XX:NumberOfGCLogFiles=2
Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 8589934592 (8192.0MB)*
NewSize = 1363144 (1.2999954223632812MB)
MaxNewSize = 5150605312 (4912.0MB)
OldSize = 5452592 (5.1999969482421875MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 134217728 (128.0MB)
CompressedClassSpaceSize = 1065353216 (1016.0MB)
MaxMetaspaceSize = 1073741824 (1024.0MB)
G1HeapRegionSize = 4194304 (4.0MB)
Heap Usage:
G1 Heap:
regions = 2048
capacity = 8589934592 (8192.0MB)
used = 2241515408 (2137.6756744384766MB)
free = 6348419184 (6054.324325561523MB)
26.09467376023531% used
G1 Young Generation:
Eden Space:
regions = 26
capacity = 4655677440 (4440.0MB)
used = 109051904 (104.0MB)
free = 4546625536 (4336.0MB)
2.3423423423423424% used
Survivor Space:
regions = 35
capacity = 146800640 (140.0MB)
used = 146800640 (140.0MB)
free = 0 (0.0MB)
100.0% used
G1 Old Generation:
regions = 480
capacity = 3787456512 (3612.0MB)
used = 1981468560 (1889.6756744384766MB)
free = 1805987952 (1722.3243255615234MB)
52.31660228234985% used