Java jmap -heap 命令给出了 OutOfMemoryError

标签 java tomcat out-of-memory jmap

我们定期运行 jmap -heap 命令来监控 tomcat 应用程序。然而,这是我们第一次遇到 OutOfMemoryError。

当我们在服务器级别监控内存时,大约有 110MB 可用。由于它只是监视,我们是否可以忽略这次假设没有对应用程序造成伤害并且运行此命令时服务器内存不足?

$ ./jmap -heap 13511
Attaching to process ID 13511, please wait...
Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at sun.tools.jmap.JMap.runTool(JMap.java:179)
        at sun.tools.jmap.JMap.main(JMap.java:110)
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:597)
        at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal.<init>(LinuxDebuggerLocal.java:210)
        at sun.jvm.hotspot.bugspot.BugSpotAgent.setupDebuggerLinux(BugSpotAgent.java:816)
        at sun.jvm.hotspot.bugspot.BugSpotAgent.setupDebugger(BugSpotAgent.java:518)
        at sun.jvm.hotspot.bugspot.BugSpotAgent.go(BugSpotAgent.java:493)
        at sun.jvm.hotspot.bugspot.BugSpotAgent.attach(BugSpotAgent.java:332)
        at sun.jvm.hotspot.tools.Tool.start(Tool.java:163)
        at sun.jvm.hotspot.tools.HeapSummary.main(HeapSummary.java:39)

更新:我们尝试再次运行 jmap -heap 并得到 java.lang.OutOfMemoryError:无法创建 GC 线程。系统资源不足。

因此,问题似乎出在操作系统资源级别。

$ ./jmap -heap 13511
#
# A fatal error has been detected by the Java Runtime Environment:
#
# java.lang.OutOfMemoryError: Cannot create GC thread. Out of system resources.
#
#  Internal Error (gcTaskThread.cpp:38), pid=13162, tid=1104300352
#  Error: Cannot create GC thread. Out of system resources.
#
# JRE version: 6.0_18-b07
# Java VM: Java HotSpot(TM) 64-Bit Server VM (16.0-b13 mixed mode linux-amd64 )
# An error report file with more information is saved as:
# /data01/home/s618199/JAVA/jdk1.6.0_18/bin/hs_err_pid13162.log
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
#
Aborted

最佳答案

这不是内存问题(尽管它被报告为内存问题)而是操作系统资源问题:您不能再创建任何线程。而且它似乎影响了 jmap 程序而不是 Tomcat。

关于Java jmap -heap 命令给出了 OutOfMemoryError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32601852/

相关文章:

java - 在同一台机器上为不同的应用程序运行多个jvm

java - 如何使 rijndael (php) 算法适应 aes (java)

java - 如何在 Tomcat 上的 Web 应用程序中提供静态文件

java - StringBuilder.append() 中的 OutOfMemoryError 即使有足够的内存

java - 为什么调整 java 堆分配大小会导致 OOME?

java - 在java中我们可以在没有真正的数据库连接的情况下执行SQL吗?

java - ArrayListMultimap.create() 和 RowData = new ArrayList() 之间的区别;

ruby-on-rails - 如何保持 Ruby on Rails 混合集群和 Tomcat 服务器之间的 session ?

apache - 生产环境应该使用 mod_proxy_ajp 还是 mod_jk?

haskell - 在 Haskell 的 ST Monad 中高效记录字符串数据