Jemalloc 生成许多文件



我按照 jemalloc 的指示,在 centOS 7 上设置 jemalloc。然而,在设置后不久

export LD_PRELOAD=/usr/local/lib/libjemalloc.so
export MALLOC_CONF=prof_leak:true,lg_prof_sample:50,lg_prof_interval:62,prof_final:true

环境变量,我可以看到很多 jeprof.*.heap 文件被写入我的当前目录。我根本没有启动我的码头服务器,尽管如此,还是生成了很多文件。哪个进程正在生成它?

当我尝试启动应用程序时,

如下所示
$LD_PRELOAD $MALLOC_CONF $JAVA_HOME/java/ Test

它导致了分段错误,但开始连续写入许多文件。

我试图像这样打开一个 jeprof.*.堆

jeprof --show_bytes `which w` jeprof.47757.0.f.heap
top 

这给了我 0 个字节。尝试生成gif文件,即使该文件为空。 我该如何解决这个问题?

@apangin 在您帮助之后,如JVM_FindSignal函数中所述,连续分配本机内存发布

我能够获得以下详细信息

Using local file /bin/java.
Using local file jeprof.57473.0.f.heap.
Total: 79372091 B
78084060  98.4%  98.4% 78084060  98.4% je_prof_backtrace
1288031   1.6% 100.0%  1474342   1.9% Java_java_util_zip_ZipFile_getZipMessage
0   0.0% 100.0%  6889972   8.7% 0x00007f3d5ebac3e6
0   0.0% 100.0%   270421   0.3% 0x00007f3d5ebb8a79
0   0.0% 100.0%   727762   0.9% 0x00007f3d5ebb8a87
0   0.0% 100.0%   589239   0.7% 0x00007f3d5ebb9ab2
0   0.0% 100.0%   854269   1.1% 0x00007f3d5ebb9ac0
0   0.0% 100.0%   270421   0.3% 0x00007f3d5ebb9cb7
0   0.0% 100.0%   135210   0.2% 0x00007f3d5ebbc5fa
0   0.0% 100.0%   135210   0.2% 0x00007f3d5ebbc768
0   0.0% 100.0%   135210   0.2% 0x00007f3d5ee57146
0   0.0% 100.0%   143743   0.2% 0x00007f3d5ee8bc25
0   0.0% 100.0%   444413   0.6% 0x00007f3d5ef13945
0   0.0% 100.0%   136258   0.2% 0x00007f3d5ef764fb
0   0.0% 100.0%  8463202  10.7% 0x00007f3d5efbdb8a
0   0.0% 100.0%   143743   0.2% 0x00007f3d5f220c67
0   0.0% 100.0%   135210   0.2% 0x00007f3d5f3a5c65
0   0.0% 100.0% 55473738  69.9% AsyncGetCallTrace
0   0.0% 100.0% 48103708  60.6% JLI_GetStdArgc
0   0.0% 100.0% 48103708  60.6% JNI_CreateJavaVM
0   0.0% 100.0% 11897251  15.0% JNI_GetCreatedJavaVMs
0   0.0% 100.0% 11897251  15.0% JVM_DefineClassWithSource
0   0.0% 100.0%   271469   0.3% JVM_FindClassFromBootLoader
0   0.0% 100.0%   431486   0.5% JVM_FindClassFromCaller
0   0.0% 100.0%   131120   0.2% JVM_FindLoadedClass
0   0.0% 100.0% 76994237  97.0% JVM_FindSignal
0   0.0% 100.0%   148137   0.2% JVM_GetCPMethodClassNameUTF
0   0.0% 100.0%   148137   0.2% JVM_GetCPMethodSignatureUTF
0   0.0% 100.0%   135210   0.2% JVM_GetClassDeclaredFields
0   0.0% 100.0%   405631   0.5% JVM_GetClassName
0   0.0% 100.0%   143743   0.2% JVM_IHashCode
0   0.0% 100.0%   143743   0.2% JVM_MonitorWait
0   0.0% 100.0%   431486   0.5% JVM_RawMonitorExit
0   0.0% 100.0%   659324   0.8% JVM_StartThread
0   0.0% 100.0% 77220036  97.3% JVM_handle_linux_signal
0   0.0% 100.0% 11897251  15.0% Java_java_lang_ClassLoader_defineClass1
0   0.0% 100.0%   271469   0.3% Java_java_lang_ClassLoader_findBootstrapClass
0   0.0% 100.0%   431486   0.5% Java_java_lang_Class_forName0
0   0.0% 100.0%   592551   0.7% Java_java_util_zip_Inflater_inflateBytes
0   0.0% 100.0%   134688   0.2% Java_java_util_zip_Inflater_init
0   0.0% 100.0%  1117359   1.4% Java_java_util_zip_ZipFile_open
0   0.0% 100.0% 75438262  95.0% SUNWprivate_1.1
0   0.0% 100.0%   296275   0.4% VerifyClassForMajorVersion
0   0.0% 100.0%   356982   0.4% ZIP_Open
0   0.0% 100.0%  1474342   1.9% ZIP_Unlock
0   0.0% 100.0%   176271   0.2% _GLOBAL__sub_I_eh_alloc.cc
0   0.0% 100.0%   176271   0.2% _GLOBAL__sub_I_eh_alloc.cc (inline)
0   0.0% 100.0% 59721527  75.2% __clone
0   0.0% 100.0%   176271   0.2% __static_initialization_and_destruction_0 (inline)
0   0.0% 100.0%   176271   0.2% _dl_init_internal
0   0.0% 100.0%   176271   0.2% _dl_start_user
0   0.0% 100.0%   131184   0.2% fork1
0   0.0% 100.0% 78084060  98.4% imalloc (inline)
0   0.0% 100.0% 78084060  98.4% imalloc_body (inline)
0   0.0% 100.0%   592551   0.7% inflate
0   0.0% 100.0%   592551   0.7% inflateBackEnd
0   0.0% 100.0%   134688   0.2% inflateInit2_
0   0.0% 100.0% 78084060  98.4% je_malloc_default
0   0.0% 100.0% 78084060  98.4% prof_alloc_prep (inline)
0   0.0% 100.0% 59721527  75.2% start_thread

但是我没有从 .so 文件中看到任何我的 JNI 类名。我可以看到许多内存地址。我是否遗漏了任何内容或符号未正确解析?

谢谢 拉吉

当你导出LD_PRELOAD环境变量时,jemalloc 库会被加载到你运行的每个进程中,包括每个 bash 命令。

如果只想将其应用于 Java 进程,请使用

LD_PRELOAD=/usr/local/lib/libjemalloc.so $JAVA_HOME/bin/java Test

即在java命令之前设置变量(不导出(。

相关内容

  • 没有找到相关文章

最新更新