0

我们有一个多线程生产 Java 应用程序。如本文所述,我们正在尝试检查本机内存使用情况

但是在转储中,我看到 100% 的内存被占用了je_prof_backtrace

ubuntu@platform1:/tmp/jemalloc_dump$ /home/ubuntu/jemalloc/bin/jeprof --show_bytes `which java` /tmp/jemalloc_dump/tsdb.62634.6454.i6454.heap
Using local file /usr/bin/java.
Using local file /tmp/jemalloc_dump/tsdb.62634.6454.i6454.heap
Welcome to jeprof!  For help, type 'help'.
(jeprof) top
Total: 815965512 B
815965512 100.0% 100.0% 815965512 100.0% je_prof_backtrace
       0   0.0% 100.0% 268451840  32.9% 0x00007f1338bd83a5
       0   0.0% 100.0% 279057735  34.2% 0x00007f13390d615a
       0   0.0% 100.0% 268455936  32.9% 0x00007f133918adda
       0   0.0% 100.0% 268455936  32.9% AllocateHeap
       0   0.0% 100.0% 268455936  32.9% JVM_MonitorWait
       0   0.0% 100.0% 268451840  32.9% Java_java_util_zip_Inflater_inflateBytesBytes
       0   0.0% 100.0% 268455936  32.9% ObjectSynchronizer::inflate
       0   0.0% 100.0% 268455936  32.9% ObjectSynchronizer::omAlloc
       0   0.0% 100.0% 268455936  32.9% ObjectSynchronizer::wait```

如果我使用,输出如下所示text

(jeprof) text
Total: 815965512 B
815965512 100.0% 100.0% 815965512 100.0% je_prof_backtrace
       0   0.0% 100.0% 268451840  32.9% 0x00007f1338bd83a5
       0   0.0% 100.0% 279057735  34.2% 0x00007f13390d615a
       0   0.0% 100.0% 268455936  32.9% 0x00007f133918adda
       0   0.0% 100.0% 268455936  32.9% AllocateHeap
       0   0.0% 100.0% 268455936  32.9% JVM_MonitorWait
       0   0.0% 100.0% 268451840  32.9% Java_java_util_zip_Inflater_inflateBytesBytes
       0   0.0% 100.0% 268455936  32.9% ObjectSynchronizer::inflate
       0   0.0% 100.0% 268455936  32.9% ObjectSynchronizer::omAlloc
       0   0.0% 100.0% 268455936  32.9% ObjectSynchronizer::wait

紧随其后的步骤。

  1. 从这里下载了 jemalloc 5.2.1 发布标签。
  2. ./autogen.sh --enable-prof在 jmalloc tar 解压的目录中。
  3. make

使用以下选项启动应用程序

export JEMALLOC_PATH=/home/ubuntu/jemalloc
export MALLOC_CONF=prof:true,lg_prof_interval:21,lg_prof_sample:28,prof_prefix:/tmp/jemalloc_dump/tsdb
LD_PRELOAD=${JEMALLOC_PATH}/lib/libjemalloc.so.2 \
java ...

我是jemalloc的新手。有人可以建议可能出了什么问题吗?

ubuntu@platform1:/tmp/jemalloc_dump$ java -version
openjdk version "11.0.11" 2021-04-20 LTS
OpenJDK Runtime Environment Zulu11.48+22-SA (build 11.0.11+9-LTS)
OpenJDK 64-Bit Server VM Zulu11.48+22-SA (build 11.0.11+9-LTS, mixed mode)
  • 操作系统 - Ubuntu 18.04
4

2 回答 2

0

这也已在github中讨论过。发布相关回复

从原始线程中引用杰森:

这通常是由于回溯工具除了报告调用者的返回指令指针之外没有做任何事情造成的。如果您使用 libunwind,您的运气可能会更好,但不幸的是,我已经看到所有支持的回溯机制在各种情况下都失败了。

换句话说,如果您还没有尝试过 libunwind,请尝试一下。报告的问题发生在堆栈展开器无法遍历堆栈时,在这种情况下 jemalloc / jeprof 没有任何回溯数据要报告。

关闭是因为 jemalloc 方面没有任何可操作的。

于 2021-10-27T07:02:59.123 回答
0

尝试使用以下标志进行配置:

./configure --enable-prof --enable-stats --enable-debug --enable-fill
于 2021-07-08T12:00:28.130 回答