【问题标题】:Evaluation - OutOfMemoryError: unable to create new native thread评估 - OutOfMemoryError:无法创建新的本机线程
【发布时间】:2016-11-02 17:55:32
【问题描述】:

虽然这是各种 Stackoverflow 用户报告的典型错误消息,但我的问题与如何评估提出的解决方案是否解决问题有关。

我阅读了与此错误相关的各种讨论和文章,并且大多数解决方案都深入到 Linux ulimits,我想这对我来说似乎也是如此。

我的 ulimit 值为:

STACK 10240k, CORE 0k, NPROC 1024, NOFILE 4096;

我猜这个问题可能是 NOPROC / NOFILE 太低(只有默认值)。

但是,我想知道是否有一种确切的方法来确定根本原因,例如 NOPROC 已超出等,以及是否有一种方法可以准确评估当前正在使用的进程/文件句柄的数量;或者还有其他一些我应该关注的可以统计评估的问题吗?

仅供参考,发生此问题时,未启用 heapdump,并且在错误点没有 threadump 数据。

感谢您对评估和解决此问题的投入。

这是简短的堆栈跟踪:

Caused by: java.lang.OutOfMemoryError: unable to create new native thread
    at java.lang.Thread.start0(Native Method)
    at java.lang.Thread.start(Thread.java:714)

这是系统值:

OS:Red Hat Enterprise Linux Server release 6.3 (Santiago)
uname:Linux 2.6.32-279.el6.x86_64 #1 SMP Wed Jun 13 18:24:36 EDT 2012 x86_64
libc:glibc 2.12 NPTL 2.12
rlimit: STACK 10240k, CORE 0k, NPROC 1024, NOFILE 4096, AS infinity
load average:0.11 0.10 0.03
CPU:total 32 (8 cores per cpu, 2 threads per core) family 6 model 45 stepping 7, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, avx, aes, ht, tsc, tscinvbit, tscinv

/proc/meminfo:
MemTotal:       74206252 kB
MemFree:         2788244 kB
Buffers:         1042212 kB
Cached:         58454988 kB
SwapCached:         2860 kB
Active:         38242540 kB
Inactive:       29129604 kB

这是来自 JVM 崩溃报告的信息 - hs_err_pidxxxxx.log:

# There is insufficient memory for the Java Runtime Environment to continue.
# Cannot create GC thread. Out of system resources.
...
#  Out of Memory Error (gcTaskThread.cpp:46), pid=20396, tid=140365307795200

# JRE version:  (7.0_80-b15) (build )
# Java VM: Java HotSpot(TM) 64-Bit Server VM (24.80-b11 mixed mode linux-amd64 compressed oops)
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again

Current thread (0x00007fa95400a800):  JavaThread "Unknown thread" [_thread_in_vm, id=20458, stack(0x00007fa9583f5000,0x00007fa9584f6000)]
Stack: [0x00007fa9583f5000,0x00007fa9584f6000],  sp=0x00007fa9584f4540,  free space=1021k

Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V  [libjvm.so+0x9a320a]  VMError::report_and_die()+0x2ea
V  [libjvm.so+0x498d3b]  report_vm_out_of_memory(char const*, int, unsigned long, char const*)+0x9b
V  [libjvm.so+0x55943a]  GCTaskThread::GCTaskThread(GCTaskManager*, unsigned int, unsigned int)+0x11a
V  [libjvm.so+0x5589b8]  GCTaskManager::initialize()+0x2b8
V  [libjvm.so+0x843438]  ParallelScavengeHeap::initialize()+0x6f8
V  [libjvm.so+0x97509a]  Universe::initialize_heap()+0xca
V  [libjvm.so+0x976269]  universe_init()+0x79
V  [libjvm.so+0x5b2f25]  init_globals()+0x65
V  [libjvm.so+0x95db4d]  Threads::create_vm(JavaVMInitArgs*, bool*)+0x1ed
V  [libjvm.so+0x63b2e4]  JNI_CreateJavaVM+0x74
C  [libjli.so+0x2f8e]  JavaMain+0x9e
Java Threads: ( => current thread )
Other Threads:
=>0x00007fa95400a800 (exited) JavaThread "Unknown thread" [_thread_in_vm, id=20458, stack(0x00007fa9583f5000,0x00007fa9584f6000)]
VM state:not at safepoint (not fully initialized)
VM Mutex/Monitor currently owned by a thread: None
GC Heap History (0 events):
No events
Deoptimization events (0 events):
No events
Internal exceptions (0 events):
No events
Events (0 events):
No events

【问题讨论】:

    标签: java jvm out-of-memory jvm-hotspot ulimit


    【解决方案1】:

    我想知道是否有确切的方法来确定根本原因,比如 NOPROC 已超出等

    JVM 与任何其他软件一样,最终必须通过系统调用与内核通信。要生成新线程,它必须使用clone 系统调用,它可以返回各种错误代码(在手册页中记录)。您可以使用strace 记录系统调用并查看其错误代码,这可以提供比 OOME 更细粒度的信息。

    【讨论】:

    • 感谢您的指点。在我的情况下,当 JVM 崩溃并且进程已经重新启动(新 PID)时,我可以使用“strace”吗?另外,我应该为每个 PID 运行 strace 吗?我们有几个标准的应用程序流程和多个计划的批处理执行。该错误发生在短暂且经常执行的批处理过程中,这意味着它们会频繁获得随机的短期 PID。考虑到我的情况,您能否建议一个好的方法来跟踪这个特定问题和未来的预防性调试(我猜可能是一种不同的方法)?
    • 您阅读过 strace 手册页吗?还是您只是在控制台上尝试过?在我看来,使用起来相当简单。我鼓励进行一些实验。如果您已经尝试过并且遇到了问题,那么您应该提出后续问题来描述您的问题。
    • 我阅读了手册。它似乎对当前正在运行的进程很有用。它可以用于我的案例,对以前失败的进程进行故障排除吗?
    • 您可以将其设置为日志记录并等待问题再次发生。
    猜你喜欢
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多