Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 主机上的可用内存减少,并从堆转储中看到大量无法访问的对象_Java_Memory_Garbage Collection_Jvm_Jvm Arguments - Fatal编程技术网

Java 主机上的可用内存减少,并从堆转储中看到大量无法访问的对象

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内存 我比较了堆转储,没有发现任何内存泄漏。在重

我的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内存

我比较了堆转储,没有发现任何内存泄漏。在重新启动java服务之前/之后,堆内存使用情况没有太大差异。然而,我注意到相当多的不可到达的对象。我比较了两个堆转储,发现由于不可访问的对象,保留的堆大小增加了约500MB

所以我猜有些对象在年轻的空间中没有GCed,或者被移动到旧的空间而没有GCed,因为完整的GC还没有启动

我的问题是

  • 我的JVM配置正确吗?我是否需要进行更改以避免大量无法访问的对象
  • 从下面显示的
    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