我得到"Java HotSpot(TM)64位服务器VM警告:异常java.lang.OutOfMemoryError发生调度信号SIGTERM到处理程序"tomcat中的错误

Ars*_*hak 8 java out-of-memory jvm-crash tomcat7

我在VPS上有tomcat web应用程序,tomcat有时(大约每月一次)在catalina.out中崩溃并出现以下错误:

Java HotSpot(TM)64位服务器VM警告:异常java.lang.OutOfMemoryError发生将调度信号SIGTERM发送到处理程序 - 可能需要强制终止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)
    
    Run Code Online (Sandbox Code Playgroud)
  • Java参数:-Xms512m -Xmx1024m

我在该服务器上也有Apache-PHP.

我正在使用Munin监视服务器负载,它向我显示内存和CPU使用率始终稳定,并且在崩溃之前没有任何增加.

我也通过java.lang.Runtime类记录java内存使用情况,它显示jvm总是使用max200Mb内存并且在崩溃之前没有增加.崩溃前的最后一个日志是40秒前,那个时间使用的内存是:152Mb.

我的Web应用程序还运行6-7个线程,用于从不同的公共API收集数据.这些线程在tomcat启动时启动,并且它们始终以定期休眠运行.

你能告诉我它崩溃的原因吗?我怎么才能找到原因?

Adi*_*bak 0

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

  • 检查机器中的总体内存使用情况。可能是其他进程正在消耗所有内存,迫使 Linux 终止 JVM:Mysql 或 Postgress 等数据库可能是可疑的。

  • 检查/var/log/messages崩溃前后的时间段是否有异常事件。