我在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继续做的事情
提前感谢大家。
答案 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时,它会立即询问用户 如果他们希望停止或继续批处理脚本。