Jemalloc 使用 Jeprof 从'*.heap'文件生成 GIF



首先,jemalloc(在我的用例中)的目的是跟踪由JNI调用等原因引起的本机内存分配,所以让我们开始:

大家好,我这里有一些严重的问题。我们的一个应用程序中碰巧有内存泄漏。它位于 JNI 库中,特别适合那些知道它的人 - cplex。我已经知道了,但是由于我们的经理现在要求我获得证明,我花了大量的时间试图获得证明。我遇到了一个名为 jemalloc 的怪物工具(是的,我知道它不仅仅是一个工具),它应该创建".heap"文件,这很棒,我设法虽然我看不到任何实际从该文件中读取任何合理内容的方法,这是示例:生成的".heap"文件的 PNG 图像- 只有前几行,但看起来都差不多

然后我发现还有另一个叫做"jeprof"的怪物显然可以将那个">.heap"文件转换为漂亮的">.gif" - 你所要做的就是运行这样的命令:jeprof --show_bytes --gif /path/to/jvm/bin/java jeprof*.heap > /tmp/app-profiling.gif,它应该在这里产生类似示例(和描述)的东西:https://gdstechnology.blog.gov.uk/2015/12/11/using-jemalloc-to-get-to-the-bottom-of-a-memory-leak/(您需要将页面向下滚动到"JEMALLOC 救援"部分以查看我正在谈论的 gif 示例)。

不幸的是,关于如何实际使用它的信息正好为 0,除了像我包含的博客之外。每次我尝试使用确切的命令生成该 gif 时:jeprof --show_bytes --gif java jeprof.out.14441.5.i5.heap > ../../../sheetchallenger/temp/app-profiling_14_10.gif- 我得到以下答案,并创建一个大小为 0 字节的空 gif:

Use of uninitialized value $line in substitution (s///) at /usr/local/bin/jeprof line 3256.
http://jeprof.out.14441.5.i5.heap/pprof/symbol doesn't exist

这是它似乎在谈论的"jeprof"文件(我的意思是第 3256 行周围的部分):

sub CheckSymbolPage {
my $url = SymbolPageURL();
my $command = ShellEscape(@URL_FETCHER, $url);
open(SYMBOL, "$command |") or error($command);
my $line = <SYMBOL>;
$line =~ s/r//g;         # Line:3256: turn windows-looking lines into unix-looking lines
close(SYMBOL);
unless (defined($line)) {
error("$url doesn't existn");
}
if ($line =~ /^num_symbols:s+(d+)$/) {
if ($1 == 0) {
error("Stripped binary. No symbols available.n");
}
} else {
error("Failed to get the number of symbols from $urln");
}
}

从字面上看,不知道这是想告诉我什么,为什么它使用 http?为什么?我知道没有创建某种配置文件,或者它似乎在说但是什么配置文件,在哪里,如何?

也许提到我第一次运行这个"jeprof 堆文件到 gif 转换命令"时,我收到了以下响应:

[root@mnd-dev-kfk01 sheetchallenger]# jeprof --show_bytes --gif java jeprof.out.12077.129.i129.heap > temp/app-profiling_11_24.gif
Using local file jeprof.out.12077.129.i129.heap.
The first profile should be a remote form to use /pprof/symbol

这到底意味着什么,我为什么要关心 - 这很重要吗,什么遥远的形式,什么的形式,为了什么?

所以基本上问题是:由于我已经可以生成那些不幸的"*.heap"文件(如果这些文件似乎不正确,请有人纠正我),我到底如何将它们转换为有用的东西最好使用 jeprof 或其他任何东西?

我可以将它们转换为我上面链接的这个网站上显示的 gif (https://gdstechnology.blog.gov.uk/2015/12/11/using-jemalloc-to-get-to-the-bottom-of-a-memory-leak/),或者我可以对它们做任何其他事情吗?

亲切地问候你们所有人,希望有人能帮助我解决这个问题。

jeprof --show_bytes --gif <java bin path>/java jeprof.out.12077.129.i129.heap > temp/app-profiling_11_24.gif

尝试使用完整的java路径,它帮助了我

我发现以下错误消息
The first profile should be a remote form to use /pprof/symbol
可能与实际问题无关,如果您的java 路径错误,则会显示!!

尝试使用$JAVA_HOME/bin/java作为您的 Java 路径,如下所示:

jeprof --show_bytes --gif $JAVA_HOME/bin/java jeprof.*.heap > temp/app-profiling.gif

注意!!env varJAVA_HOME可能没有定义,因此只需尝试查找您的 java 路径/<path to java home>/bin/java并使用它

相关内容

  • 没有找到相关文章