我是 GlassFish 和一般应用程序服务器的新手。我有一个运行 Ubuntu 的 Amazon EC2 实例并安装了 GlassFish 4。它启动时没有问题,但过一段时间 GlassFish 服务器会自行关闭。我查看了 server.log,但一切似乎正常,并且没有描述任何故障或关闭的条目。关于可能是什么原因的任何输入,或者我应该在哪里寻找任何线索?
问问题
4784 次
1 回答
9
我面临着完全相同的情况。我怀疑原因是 JVM 内存不足,因为免费的 EC2 实例有一个 600 MB 的吝啬鬼(cat /proc/meminfo
要验证)。为了寻找线索,我为 Glassfish 域打开了 JVM 日志记录,为此我在 JVM 参数中添加了以下几行<domain>/config/domain.xml
:
<jvm-options>-XX:LogFile=${com.sun.aas.instanceRoot}/logs/jvm.log</jvm-options>
<jvm-options>-XX:+LogVMOutput</jvm-options>
后来当 Glassfish 关闭时,其中jvm.log
包含大量消息,如下所示:
<dependency_failed type='unique_concrete_method' ctxk='java/util/ArrayList' x='java/util/ArrayList iterator ()Ljava/util/Iterator;' witness='javax/faces/component/UIComponentBase$ChildrenList' stamp='13211.267'/>
<dependency_failed type='unique_concrete_method' ctxk='java/util/ArrayList' x='java/util/ArrayList iterator ()Ljava/util/Iterator;' witness='javax/faces/component/UIComponentBase$ChildrenList' stamp='13211.267'/>
<dependency_failed type='unique_concrete_method' ctxk='java/util/ArrayList' x='java/util/ArrayList iterator ()Ljava/util/Iterator;' witness='javax/faces/component/UIComponentBase$ChildrenList' stamp='13211.267'/>
我从未发现它们的真正含义,但我将它们发布在这里,以防有人与我走同样的路并为他们搜索。
然后最后我看了看/var/log/syslog
(我发现的那个实际上是命名的syslog.1
),瞧!我得到确认JVM进程内存不足并被杀死:
Dec 20 07:44:44 ip-172-31-33-222 kernel: [1518108.211801] Out of memory: Kill process 22248 (java) score 743 or sacrifice child
Dec 20 07:44:44 ip-172-31-33-222 kernel: [1518108.211833] Killed process 22248 (java) total-vm:1622220kB, anon-rss:447752kB, file-rss:0kB
在我看来,增加交换空间应该可以解决问题。原来 EC2 交换空间默认为 0,所以我分配了 1 GB,请参阅如何将交换添加到 EC2 实例?
该服务器过去每天都会崩溃,但是在使用交换后,它已经好几周没有崩溃了。
于 2013-12-20T19:22:43.857 回答