首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jemalloc使用jeprof从'*.heap‘文件生成gif

jemalloc使用jeprof从'*.heap‘文件生成gif
EN

Stack Overflow用户
提问于 2017-11-01 14:51:35
回答 2查看 3.9K关注 0票数 4

首先,jemalloc (在我的usecase中)的目的是跟踪由JNI调用之类的东西引起的本机内存分配,所以让我们开始:

嗨,伙计们,我有一些严重的问题。我们的一个应用程序碰巧有内存泄漏。它位于JNI图书馆,特别是那些知道它的人。我已经知道了,但既然我们的经理要求我拿到证据,现在我正花大量的时间去争取证据。我遇到了一个叫做jemalloc的怪物工具(是的,我知道它不仅仅是一个工具),它应该创建".heap“文件,这是很棒的,虽然我找不到从该文件中读取任何合理的方法,下面是一个例子:https://i.stack.imgur.com/mAZKd.png.heap" file - first few lines only but it all looks pretty much like that

我发现还有另外一个名为"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 to the援救”部分,以查看我正在讨论的gif示例)。

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

代码语言:javascript
运行
复制
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行周围的部分):

代码语言:javascript
运行
复制
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");
  }
}

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

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

代码语言:javascript
运行
复制
[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/)一样,或者我还能用它们做什么吗?

向你们所有人致以良好的问候,希望有人能帮我弄清楚这件事。

EN

回答 2

Stack Overflow用户

发布于 2018-12-19 13:45:12

代码语言:javascript
运行
复制
jeprof --show_bytes --gif <java bin path>/java jeprof.out.12077.129.i129.heap > temp/app-profiling_11_24.gif

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

票数 2
EN

Stack Overflow用户

发布于 2021-09-23 14:59:32

我发现了下面的错误消息

The first profile should be a remote form to use /pprof/symbol

可能与实际问题无关,如果您的java路径错了,就会出现!

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

代码语言:javascript
运行
复制
jeprof --show_bytes --gif $JAVA_HOME/bin/java jeprof.*.heap > temp/app-profiling.gif

注意!可能没有定义env var JAVA_HOME,所以只需尝试找到您的java路径/<path to java home>/bin/java并使用它。

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

https://stackoverflow.com/questions/47057599

复制
相关文章

相似问题

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