-2

我在具有 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

日志文件中的错误:
信息 | 虚拟机 6 | 2012/07/03 05:46:12 | BE在这里做一些事情。
错误 | 包装 | 2012/07/03 05:57:14 | JVM 出现挂起:等待来自 JVM 的信号超时。
错误 | 包装 | 2012/07/03 05:57:14 | JVM 未按请求退出,已终止
INFO | 包装 | 2012/07/03 05:57:14 | JVM 在等待终止应用程序时自行退出。
状态 | 包装 | 2012/07/03 05:57:14 | JVM 响应信号 SIGKILL (9) 退出。
状态 | 包装 | 2012/07/03 05:57:19 | 启动 JVM...
信息 | 虚拟机 7 | 2012/07/03 05:57:19 | 包装器(版本 3.2.3)http://wrapper.tanukisoftware.org
信息 | 虚拟机 7 | 2012/07/03 05:57:19 | 版权所有 1999-2006 Tanuki Software, Inc. 保留所有权利。
信息 | 虚拟机 7 | 2012/07/03 05:57:19 |
信息 | 虚拟机 7 | 2012/07/03 05:57:19 | BE继续做事

提前感谢大家。

4

1 回答 1

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 退出时,它会立即询问用户是否希望停止或继续批处理脚本。

于 2012-07-12T07:57:40.487 回答