Java / JNI泄漏动态库

时间:2017-11-10 14:29:18

标签: java c++ java-native-interface

我的进程是在Suse运行的JNI上运行对Java的C ++调用。   经过几天的工作后,我遇到了关于JVM的内存问题:

Java Runtime Environment没有足够的内存继续。

本机内存分配(mmap)无法映射12288字节以提交保留内存。

使用以下跟踪:

V  [libjvm.so+0xaba71a]  VMError::report_and_die()+0x2ba
V  [libjvm.so+0x4f9ecb]  report_vm_out_of_memory(char const*, int, unsigned long, VMErrorType, char const*)+0x8b
V  [libjvm.so+0x91b553]  os::Linux::commit_memory_impl(char*, unsigned long, bool)+0x103
V  [libjvm.so+0x91b61c]  os::pd_commit_memory(char*, unsigned long, bool)+0xc
V  [libjvm.so+0x9150da]  os::commit_memory(char*, unsigned long, bool)+0x2a
V  [libjvm.so+0x9197ef]  os::pd_create_stack_guard_pages(char*, unsigned long)+0x7f
V  [libjvm.so+0xa603ce]  JavaThread::create_stack_guard_pages()+0x5e
V  [libjvm.so+0x6cd4e4]  attach_current_thread+0xb4

这台机器有足够的内存(几TB),所以这很不可能是由于普通机器内存不足而无法增加预留的Java堆。

通过查看报告的剩余部分,我可以看到我有动态库的65535个条目,如下所示:

7326707ff000-732670801000 ---p 00000000 00:00 0 
732670801000-732671000000 rwxp 00000000 00:00 0 
732671000000-73269d400000 rw-p 00000000 00:00 0 
73269d5ff000-73269d602000 ---p 00000000 00:00 0 

我的问题:

  1. 如何转储Java进程正在使用的动态库?
  2. JVM的动态库数量是否有限制 可以控制(类似于XMX)?

0 个答案:

没有答案