Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.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 完全GC经常发生_Java_Performance_Memory Leaks_Garbage Collection_Jvm - Fatal编程技术网

Java 完全GC经常发生

Java 完全GC经常发生,java,performance,memory-leaks,garbage-collection,jvm,Java,Performance,Memory Leaks,Garbage Collection,Jvm,详细日志显示每7秒钟发生一次完整GC- ], 7.3933980 secs] [Times: user=89.17 sys=1.16, real=7.39 secs] 79959.910: [Full GC [PSYoungGen: 390144K->194442K(451584K)] [ParOldGen: 1572654K->1572852K(1572864K)] 1962798K->1767294K(2024448K) [PSPermGen: 103569K->103569K(103936

详细日志显示每7秒钟发生一次完整GC-

], 7.3933980 secs] [Times: user=89.17 sys=1.16, real=7.39 secs] 79959.910: [Full GC [PSYoungGen: 390144K->194442K(451584K)] [ParOldGen: 1572654K->1572852K(1572864K)] 1962798K->1767294K(2024448K) [PSPermGen: 103569K->103569K(103936K)], 7.9599570 secs] [Times: user=95.28 sys=1.09, real=7.96 secs] 79984.776: [Full GC [PSYoungGen: 390144K->196124K(451584K)] [ParOldGen: 1572852K->1572544K(1572864K)] 1962996K->1768668K(2024448K) [PSPermGen: 103569K->103569K(103936K)], 7.6023130 secs] [Times: user=91.82 sys=1.22, real=7.60 secs] 80007.996: [Full GC [PSYoungGen: 390144K->194969K(451584K)] [ParOldGen: 1572544K->1572734K(1572864K)] 1962688K->1767703K(2024448K) [PSPermGen: 103569K->103569K(103936K)], 8.0980790 secs] [Times: user=98.03 sys=1.28, real=8.10 secs] ],7.3933980秒][次:用户=89.17系统=1.16,实际=7.39秒] 79959.910:[完整GC[PSYoungGen:390144K->194442K(451584K)][ParOldGen:1572654K->157282K(1572864K)]1962798K->1767294K(2024448K)[PSPermGen:103569K->103569K(103936K)],7.9599570秒][次:用户=95.28系统=1.09,实际=7.96秒] 79984.776:[完整GC[PSYoungGen:390144K->196124K(451584K)][ParOldGen:1572822K->1572544K(1572864K)]1962996K->1768668K(2024448K)[PSPermGen:103569K->103569K(103936K)],7.6023130秒][次:用户=91.82系统=1.22,实际=7.60秒] 80007.996:[完整GC[PSYoungGen:390144K->194969K(451584K)][ParOldGen:157254K->1572734K(1572864K)]1962688K->1767703K(2024448K)[PSPermGen:103569K->103569K(103936K)],8.0980790秒][次:用户=98.03系统=1.28,真实=8.10秒] 我使用的JVM参数为Oracle hotspot 64位,RAM大小为30688332 KB,java版本为1.7.091,在Linux上-

-服务器-Xmx2048m-Xms2048m-XX:NewRatio=3-XX:MaxPermSize=512m-XX:+UseParallelGC-Djava.awt.headless=true

jstack结果显示-

我尝试将NewRatio更改为2或3,将Xmx更改为


详细的gc日志显示,老一代正在努力重新分配内存。下一步该怎么办?请建议

您的代码是否在任何地方调用System.gc()?如果是,多久打一次电话?我有一段代码在一个大任务完成时调用gc,但后来的更改意味着它被调用的频率比预期的要高很多,导致花费大量时间来执行无用的gc


简单的修复方法是删除对System.gc()的调用,并让JVM处理它。一个聪明的解决方法是调用一个helper方法,该方法检查自上次调用GC以来的时间,并且仅在经过足够的时间后才调用。这可能不需要,所以请先尝试简单的修复。

您的代码是否在任何地方调用System.gc()?如果是,多久打一次电话?我有一段代码在一个大任务完成时调用gc,但后来的更改意味着它被调用的频率比预期的要高很多,导致花费大量时间来执行无用的gc


简单的修复方法是删除对System.gc()的调用,并让JVM处理它。一个聪明的解决方法是调用一个helper方法,该方法检查自上次调用GC以来的时间,并且仅在经过足够的时间后才调用。这可能不需要,所以请先尝试简单的修复。

明智地使用可用资源。

您使用的最大内存为2048MB,我认为这对于今天的应用程序来说是相当少的。如果你的应用程序需要更多的内存,如果你有更多的可用内存(我认为你有~30GB),那么IMHO,那么你应该分配它

尝试诸如最后手段之类的优化。我认为您应该尝试将xmx大小加倍,然后比较结果。考虑到系统上并没有其他应用程序,将可用系统内存的一半分配给应用程序并没有什么害处


如果增加内存不起作用(因为内存泄漏),那么使用探查器/堆转储和内存分析器或静态代码分析器来评测应用程序

明智地使用可用资源。

您使用的最大内存为2048MB,我认为这对于今天的应用程序来说是相当少的。如果你的应用程序需要更多的内存,如果你有更多的可用内存(我认为你有~30GB),那么IMHO,那么你应该分配它

尝试诸如最后手段之类的优化。我认为您应该尝试将xmx大小加倍,然后比较结果。考虑到系统上并没有其他应用程序,将可用系统内存的一半分配给应用程序并没有什么害处


如果增加内存不起作用(因为内存泄漏),那么使用探查器/堆转储和内存分析器或静态代码分析器来评测应用程序

如果你需要更多的内存,你需要更多的内存。您的应用程序要么内存不足,要么内存泄漏。启动JVisualVM,分析内存分配,找出它是什么。第一步始终是生成堆转储并了解发生了什么。分析应用程序,找出分配发生的位置并减少分配。如果您的计算机有30 GB,默认JVM大小将为此大小的1/4。i、 e.~8GB。由于您已经调低了内存量,看起来这还不够,我会尝试增加最大大小,或者根本不设置它。我还将尝试删除NewRatio,并在再次设置之前设置它的运行方式。注意:您的旧版本已满99.98%。您的永久版本看起来很好,因为只使用了103 MB。如果您需要更多RAM,则需要更多RAM。您的应用程序要么内存不足,要么内存泄漏。启动JVisualVM,分析内存分配,找出它是什么。第一步始终是生成堆转储并了解发生了什么。分析应用程序,找出分配发生的位置并减少分配。如果您的计算机有30 GB,默认JVM大小将为此大小的1/4。i、 e.~8GB。由于您已经调低了内存量,看起来这还不够,我会尝试增加最大大小,或者根本不设置它。我还将尝试删除NewRatio,并在再次设置之前设置它的运行方式。注意:您的旧版本已满99.98%。您的permgen看起来很好,因为只使用了103 MB。最简单的修复方法是使用JVM选项运行
-XX:-DisableExplicitGC
,这样在不更改应用程序的情况下忽略这些调用。最简单的修复方法是使用JVM选项运行
-XX:-DisableExplicitGC
,这样在不更改应用程序的情况下忽略这些调用根本不需要更改应用程序。