内容简介:翻译自:https://stackoverflow.com/questions/11095094/i-get-java-hotspottm-64-bit-server-vm-warning-exception-java-lang-outofmemor
我在VPS上有tomcat web应用程序,tomcat有时(大约每月一次)崩溃,catalina.out中出现以下错误:
Java HotSpot(TM) 64-Bit Server VM warning: Exception java.lang.OutOfMemoryError occurred dispatching signal SIGTERM to handler- the VM may need to be forcibly terminated.
以下是我的配置的一些细节:
> VPS:debian-5.0-x86_64
> RAM:2.5 gb,
>虚拟处理器:8
> HDD: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秒前,那个时间使用的内存是:152Mb.
我的Web应用程序还运行6-7个线程,用于从不同的公共API收集数据.这些线程在tomcat启动时启动,并且它们始终以定期休眠运行.
你能告诉我它崩溃的原因吗?我怎么才能找到原因?
让我们解开这个:
Exception java.lang.OutOfMemoryError occurred dispatching signal SIGTERM to handler- the VM may need to be forcibly terminated.
首先,看起来像JVM(Tomcat)进程发送了一个SIGTERM信号.它必须是JVM外部的东西. JVM不向自身1发送信号.
所以你需要弄清楚这是做什么的.我猜第一个猜测就是OOM杀手……但是OOM杀手使用SIGKILL而不是SIGTERM. JVM永远不会看到SIGKILL的到来!
(您可以通过查看“/ var / log / messages”…或系统记录内核消息的任何地方来确认它不是OOM杀手.请参阅 How to Configure the Linux Out-of-Memory Killer )
如果它不是OOM杀手,那么有几种方法可以找到信号源:
> Finding the source of signals on Linux with strace, auditd, or systemtap
一旦你掌握了信号的来源,你就会有线索的原因.
另一个值得注意的事情是在处理SIGTERM时发生了OutOfMemoryError.这强烈暗示(对我而言)根本原因是某些东西检测到Tomcat使用了太多内存,并且发送了一个SIGTERM以使其消失(干净利落).我猜想当时发生的事情是JVM进入操作系统要求更多的内存(处理SIGTERM)并且操作系统显示“否”,并且JVM抛出OutOfMemoryError.不幸的是,JVM现在处于无法彻底退出或恢复的状态.因此它说“虚拟机可能需要被强行终止”.
无论如何.这看起来像是一个常见的Java问题的一个相当不寻常的表现.您很可能在Tomcat中运行的webapps中存在泄漏内存的错误.如果是这种情况,唯一真正的解决方案是找到并修复错误. (增加堆大小……如果可能的话……只会解决问题.它可能会减少崩溃之间的间隔,但不太可能阻止它们.)
假设你准备好咬紧牙关:
> How to find a Java Memory Leak
1 – 除非在本机代码中做某些事情……
翻译自:https://stackoverflow.com/questions/11095094/i-get-java-hotspottm-64-bit-server-vm-warning-exception-java-lang-outofmemor
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- c – 我可以在不禁用“将警告视为错误”的情况下排除某些特定警告吗?
- PHP警告:除以零
- iOS工程的警告修复
- 用了@Autowired注入,竟然被警告
- iOS去除Xcode代码警告
- PHP Session的一个警告
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Linux命令行大全
绍茨 (William E.Shotts) / 郭光伟、郝记生 / 人民邮电出版社 / 2013-3-1 / 69.00元
《Linux命令行大全》主要介绍Linux命令行的使用,循序渐进,深入浅出,引导读者全面掌握命令行的使用方法。 《Linux命令行大全》分为四部分。第一部分开始了对命令行基本语言的学习之旅,包括命令结构、文件系统的导引、命令行的编辑以及关于命令的帮助系统和使用手册。第二部分主要讲述配置文件的编辑,用于计算机操作的命令行控制。第三部分讲述了从命令行开始执行的常规任务。类UNIX操作系统,比如L......一起来看看 《Linux命令行大全》 这本书的介绍吧!