Paw*_*wel 5 java malloc java-native-interface jemalloc
首先,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 示例)。
不幸的是,除了我所包含的博客之外,关于如何实际使用它的信息几乎为零。每次我尝试使用以下命令生成该 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
Run Code Online (Sandbox Code Playgroud)
这是它似乎正在谈论的“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 exist\n");
}
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 $url\n");
}
}
Run Code Online (Sandbox Code Playgroud)
从字面上看,不知道这想告诉我什么,为什么它使用 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
Run Code Online (Sandbox Code Playgroud)
这到底意味着什么?我为什么要关心——这重要吗?什么遥远的形式、什么形式、为了什么?
所以基本上问题是:既然我已经可以生成那些不幸的“*.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
Run Code Online (Sandbox Code Playgroud)
尝试使用完整的java路径,它对我有帮助
| 归档时间: |
|
| 查看次数: |
5267 次 |
| 最近记录: |