首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Weblogic转储JFR而不丢弃旧的JFR

Weblogic转储JFR而不丢弃旧的JFR
EN

Stack Overflow用户
提问于 2015-11-18 16:08:16
回答 1查看 221关注 0票数 1

我正在使用weblogic服务器,并试图为我的Weblogic服务器获取JFR。我使用的命令行参数是:

代码语言:javascript
复制
-XX:FlightRecorderOptions=defaultrecording=true,dumponexit=true,dumponexitpath=/my/path,repository=/some/path

这里有两个缺点:

1)最多存储3个JFR,之前的数据会丢失。

2)当有一个OOM时,我执行一个脚本,用信号11 (SIGSEGV)杀死服务器。这不会转储当前录制的JFR。

如何获取崩溃时的数据并保留所有JFR数据?在这里,空间不是问题。如果我指定maxage=0,那么JFR永远不会被转储。如果指定maxsize,则一旦达到限制,文件就会被删除。

EN

回答 1

Stack Overflow用户

发布于 2018-12-24 17:59:21

我假设JDK是7/8,因为现在是2018年,而您使用的是WLS,这意味着只能将记录转储到Java关闭钩子中。尝试SIGTERM

代码语言:javascript
复制
kill -l 15

在JDK9和更高版本中,如果JVM崩溃,也可以(在本地)编写转储。该文件位于启动Java进程的位置,名为hs_err_pidXXX.jfr

JDK 10添加了对旧对象样本事件的支持,可用于诊断内存泄漏。如果应用程序由于OutOfMemoryError而退出,它将编写一个包含GC根目录路径的OOS事件(无论您是否启用了该事件)。它应该提供解决内存泄漏的信息。

JDK 11.03或更高版本包含一个命令行工具,可用于打印记录文件的内容。

代码语言:javascript
复制
$ jfr print --events OldObjectSample hs_oom_pidXXX.jfr

通过查看allocationTime,您可以看到对象何时被分配。内存泄漏通常是在应用程序的整个生命周期内分配的,所以如果忽略早期样本(静态对象)和后期样本(短期对象),很可能会发现泄漏对象及其到GC根目录的路径。只要沿着引用链走,直到你找到一个不应该存在的引用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33774667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档