java - tomcat7我得到" HotSpot(TM) 64位服务器VM警告: 在tomcat中,向处理程序"发送信号SIGTERM时发生异常 java.lang.OutOfMemoryError

  显示原文与译文双语对照的内容
96 5

我在VPS上有tomcat应用程序,tomcat有时会崩溃,在中出现如下错误:

Java HotSpot(TM) 64位 服务器VM警告:异常 java.lang.OutOfMemoryError 向handler-发送信号 SIGTERM forcibly可能需要强制终止 VM 。

以下是有关我的配置的一些详细信息:

  • VPS: debian-5.0-x86_64

  • RAM: 2.5 gb,

  • 虚拟处理器:8

  • 硬盘:60gb 硬盘- 70%免费

  • Tomcat 7.0

  • java -version:

    java version"1.6.0_18"
    OpenJDK Runtime Environment (IcedTea6 1.8.13) (6b18-1.8.13-0+squeeze1)
    OpenJDK 64-Bit Server VM (build 14.0-b16, mixed mode)
  • Java参数:-Xms512m -Xmx1024m

我在那个服务器上也有 apache php 。

我用Munin监视服务器负载,它告诉我内存和CPU使用总是稳定的,并且在崩溃之前没有增加。

我还通过 java.lang.Runtime 类记录java内存使用情况,这表明jvm总是使用max200Mb内存,并且在崩溃之前没有增加。崩溃前的最后一个日志是 40秒以前使用的内存是:152 Mb 。

我的网络应用程序还运行 6 -7线程,从不同的public api收集数据。这些线程在tomcat启动时启动,并且它们总是以周期睡眠运行。

你能告诉我为什么它崩溃了?我怎么才能找到?

时间:原作者:0个回答

107 4
  • 从 shell 运行 top 并看到内存Linux声称Java进程占用了多少内存。

  • 检查机器中的内存使用情况。可能其他进程正在消耗所有内存,迫使Linux杀死 JVM:像Mysql或者Postgress这样的数据库可能是可疑的。

  • 在崩溃的时间周期内检查 /var/log/messages的异常事件。

原作者:
80 5

你可以编辑 service.bat 或者 service.sh 文件( 在deistribution的bin文件夹中找到),并将以下两个jvm参数

XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=<PATH_TO_WRITE_DUMP>

如果你获得了堆转储文件,那么PATH_TO_WRITE_DUMP应该拥有必要的权限,在遇到问题时,请手工分析或者由某些第三方工具来分析。你可以在jvisualvm中加载这个文件,做一些分析,或者使用,它非常有用,它会提供一些潜在的内存泄漏疑点和内存泄漏树( 例如 ) 。这是一个很好的起点。

原作者:
135 1

让unpick这样:

异常 java.lang.OutOfMemoryError 向handler-发送信号 SIGTERM forcibly可能需要强制终止 VM 。

首先,它看起来像发送了 JVM ( Tomcat ) 进程的一些内存信号。它必须是JVM外部的东西。JVM不向itself1发送信号。

所以你要找出是什么。我猜第一个猜测是 OOM 。但是OOM杀手使用SIGKILL不是 SIGTERM 。而且JVM永远不会看到 !

( 你可以通过"/var/log/messages" 来确认它不是OOM杀手。或者你的系统记录内核消息的位置。参见如何配置 Linux Out-of-Memory杀手 )

如果不是OOM杀手那么有几种方法可以找到信号来源

一旦你有信号源,你就会知道它为什么被发送了。

另一个值得注意的是,OutOfMemoryError 在处理SIGTERM时发生。这强烈建议( 给我) 说,root 原因是发现Tomcat正在使用太多内存,并且已经发送了一个SIGTERM使它离开内存。我猜到,接下来的内容是,JVM要求更多的内存( 处理 SIGTERM ),并且OS说"没有",并且JVM引发 OutOfMemoryError很不幸,JVM现在处于不能完全退出或者恢复的状态。上面写着"虚拟机可能需要强制终止"。

这看起来像是一个常见的Java问题的异常表现。你很可能在Tomcat中运行的web浏览器中有一个 Bug,它。如果是这样,唯一真正的解决方案就是找到并修复 Bug 。( 增加堆大小。如果可能的话。只把问题排除。它可能减少崩溃之间的间隔,但不太可能阻止它们。

假设你准备好咬子弹了:

1 - 除非在本机代码中有些古怪的事情。

原作者:
...