为什么在AWS EC2上运行的JVM会挂起?

时间:2012-07-09 01:57:02

标签: java jboss amazon-ec2 jvm

我在16GB内存的EC2上运行批处理引擎(BE)和Jboss实例。两者都由WrapperSimpleApp管理。

BE正在不断处理大量信息。只是想知道,数据库每天增长大约10到15 GB。从日志中,BE每天下降1到7次。我将最大Java堆大小从8GB减少到4GB。它没有效果。作为最后的手段,我反弹EC2服务器,错误消失了。我想知道是否有任何方法可以找出JVM没有响应的原因。 BE正在使用相同的工作量执行相同的过程。这是EC2服务器的已知问题吗?我没有证据证明BE有过错。

以下是一些包装设置:

#初始Java堆大小(以MB为单位)
#wrapper.java.initmemory = 256
#最大Java堆大小(以MB为单位)
wrapper.java.maxmemory = 4096
wrapper.ping.timeout = 600

日志文件中的

错误:
信息| jvm 6 | 2012/07/03 05:46:12 | BE正在做一些事情。
错误|包装| 2012/07/03 05:57:14 | JVM显示为挂起:等待来自JVM的信号超时 错误|包装| 2012/07/03 05:57:14 | JVM没有按要求退出,终止了 信息|包装| 2012/07/03 05:57:14 | JVM在等待杀死应用程序时自行退出 状态|包装| 2012/07/03 05:57:14 | JVM退出以响应信号SIGKILL(9) 状态|包装| 2012/07/03 05:57:19 |启动JVM ...
信息| jvm 7 | 2012/07/03 05:57:19 |包装(版本3.2.3)http://wrapper.tanukisoftware.org
信息| jvm 7 | 2012/07/03 05:57:19 |版权所有1999-2006 Tanuki Software,Inc。保留所有权利。
信息| jvm 7 | 2012/07/03 05:57:19 |
信息| jvm 7 | 2012/07/03 05:57:19 | BE继续做的事情

提前感谢大家。

1 个答案:

答案 0 :(得分:0)

使用jstack或kill -3捕获线程转储将有助于找到问题。

如果要启动批处理文件而不是java.exe,这可能有助于解释此问题。

http://wrapper.tanukisoftware.com/doc/english/troubleshooting.html#10

  

问题是您可以将wrapper.java.command属性设置为   批处理文件而不是直接指向java.exe。请求时   线程转储,“BREAK”信号被发送到进程   command.exe / shell而不是Java进程。它然后转发   发送到JVM的信号,但也设置CTRL-C具有的内部标志   被迫了。当孩子退出Java时,它会立即询问用户   如果他们希望停止或继续批处理脚本。