草庐IT

java - 如何附加gc日志

下面是写具体文件的gclogging选项-verbose:gc-Xloggc:/logs/gc.log好的。好的。但是当java应用程序重新启动时,文件中的旧gc日志内容消失了。我希望vm将gc日志附加到“/logs/gc.log”文件。这个选项是否存在?或者我必须编写shell脚本来备份旧的gc文件? 最佳答案 您明确要求将gc数据转到名为“gc.log”的文件。您可以将date&pid附加到文件名以防止此类冲突。Hotspot中不存在防止数据被覆盖的机制。 关于java-如何附加gc

java - GC 是否从 Metaspace 收集垃圾?

我一直认为垃圾收集器只清除堆,现在我这么认为。在java8中,permGen被删除并被Metaspace取代。据我所知,Metaspace是垃圾收集器(https://stackoverflow.com/a/24075360/2674303)谁从Metaspace收集垃圾? 最佳答案 我认为您的困惑源于口语化的术语“垃圾收集”,该术语被广泛使用但并未真正描述托管环境中发生的情况。内存管理是一个复杂的过程,它被简化为:识别哪些对象是垃圾,其实就是判断哪些对象可达(读作:不是垃圾),没有遇到的都认为是垃圾如有必要,将对象引用排队到引用队

java - Jmeter java.lang.OutOfMemoryError : GC overhead limit exceeded 错误

我正在使用Jmeter将工作负载注入(inject)部署在AWSEC2实例上的应用程序。测试必须非常庞大:它持续10个小时,工作负载配置文件具有双峰形状,5分钟内大约有2600个请求。实际上我有一个部署了应用程序的m3.xlarge实例和8个m3.xlarge实例,每个实例都运行一个jmeter实例。使用python脚本,要注入(inject)的工作负载被分配到8个客户端实例中,因此在示例中,如果原始工作负载注入(inject)800个请求,则每个jmeter实例将注入(inject)100个请求。正如我所说,完整测试持续10小时,并分为每个5分钟的时间步长。每5分钟应用一点工作量变化

java - 如何为长生命周期对象优化 Java gc

我的Java应用程序维护着一个可以增长到10GB的内部缓存。过期策略设置为30分钟或达到内存阈值时(我正在使用本地ehcache)。很明显,在30分钟后,所有缓存的对象都将在旧的gen中,并且需要完整的gc来收集它们。至于现在停止世界暂停可以达到6秒,我想减少它。平均对象大小为500k,但最多可达1兆,因此我们谈论的是10000-20000个缓存对象(实际上是字节数组)。GC优化的最佳策略是什么?我知道我可以脱离堆,但这是最后的解决方案。谢谢! 最佳答案 10GB缓存不是你应该在堆中做的事情。使用ByteBuffers用于缓存。对象

java - 为什么在使用 G1 GC 时推荐使用 Java 10?

Java10通过迭代改进其现有算法来减少FullGC暂停时间。-XX:ParallelGCThreads据我了解,G1不会与我们的应用程序同时运行其收集周期。它仍然会定期暂停应用程序,并且FullGC暂停会随着堆大小的增加而增加。那它是如何提高性能的呢?谁能解释一下? 最佳答案 因为直到Java10,G1GC才在stop-the-worldfullGC周期中完全并行。根据JEP307:ParallelFullGCforG1这改善了最坏情况下的延迟:TheG1garbagecollectorisdesignedtoavoidfullc

java - 空无限循环和 GC (JVM)。请说明效果

我的空无限循环publicstaticvoidmain(String[]args){while(true){}}并在JavaVisualVM中进行分析(图片)如您所见,我不创建对象。为什么要换一个堆?请解释一下效果。为什么? 最佳答案 基本上任何Java应用程序都是多线程的,您的主线程不分配内存这一事实并不意味着其他线程也不分配。事实上,很可能通过VisualVM附加并显示GC选项卡,您在VM中生成了一些线程来监视GC资源并为VisualVM提供成为那些Shiny图表的指标。而且该监控可能会分配一些自己的资源来完成它的工作。

java - 我可以启动一个 Eden 空间如此之大的 JVM,它运行到完成而没有任何 GC。假设我有一堆空闲内存

如果我有足够的空闲内存,我可以启动一个Java应用程序(说mMven)来单独使用Eden空间运行直到完成而不需要任何GC吗? 最佳答案 是的,我已经为Java6+中的实际应用程序完成了此操作。我从一个24GB的Eden空间、微型幸存者空间和永久空间开始。后来发现8GB绰绰有余。当有bug或错误时它仍然会GC,但在正常操作下不会。我相信选项是-Xmn24g-Xmx26g-XX:SurvivorRatio=100使用默认GC。该应用程序经过优化,生成的数据量低于1GB/小时,因此使用GC运行一天。

java - 内存泄漏在 MAT 中显示为 GC root : Native Stack

我有一些我运行的第三个库代码,一段时间后我遇到了OutOfMemoryError。所以我启动了EclipseMAT并分析了内存。现在似乎无法释放内存,因为有一个对象显示为GCroot:NativeStack。阅读documentation:Inoroutparametersinnativecode,suchasuserdefinedJNIcodeorJVMinternalcode.ThisisoftenthecaseasmanymethodshavenativepartsandtheobjectshandledasmethodparametersbecomeGCroots.Forexa

java - Spark 应用程序 - Java.lang.OutOfMemoryError : Java heap space

我用的是SparkStandalone单机,128G内存,32核。以下是我认为与我的问题相关的设置:spark.storage.memoryFraction0.35spark.default.parallelism50spark.sql.shuffle.partitions50我有一个Spark应用程序,其中有一个用于1000个设备的循环。对于每个循环(设备),它都会准备特征向量,然后调用MLLib的k-Means。在循环的第25到30次迭代(处理第25到第30个设备)时,它遇到了“Java.lang.OutOfMemoryError:Java堆空间”的错误。我尝试将memoryFra

java - 即使没有 GC 根,类加载器也不会被垃圾回收

我们有一个在GlassfishV2.1.1下运行的复杂应用程序。为了能够动态加载我们的代码,我们实现了一个能够重新定义类的CustomClassloader。行为非常简单:当动态加载的类发生变化时,CustomClassloader的当前实例将被“丢弃”,并创建一个新实例来重新定义所需的类。除了同一个类被重新加载几次后(因此每次创建一个新的CustomClassloader),这工作得很好,我们得到一个PermGen空间错误,因为CustomClassloader的其他实例没有被垃圾收集。(该类应该只有一个实例)我尝试了不同的方法来追踪泄漏的位置:visualvm=>我进行堆转储并提取