【发布时间】:2013-03-26 05:15:38
【问题描述】:
我们在 1G RAM 的 linode(Ubuntu 10.04 32 位)上有 5 个应用程序。最近,我们将其中一个应用程序从该 linode 移至另一个 512M。该应用程序基于 Java EE 构建,并且在旧服务器上运行相当稳定。然而,在新服务器上,tomcat(两台服务器上的版本 6)时不时地崩溃,没有任何日志。新服务器上的唯一区别是我们在旧服务器上使用 nginx 作为针对 apache2 的 Web 服务器,而新服务器使用 Ubuntu 12、64 位。没有理由怀疑内存泄漏,因为应用程序在旧服务器上表现良好。是否有任何 tomcat 优化可以防止此类崩溃。我怀疑原因是否也是由于流量引起的负载(因为新服务器的 RAM 较低),因为即使在只有大约 10 个并发用户的半夜,tomcat 仍然崩溃。对这个问题的任何见解将不胜感激。
我检查了 RAM 使用情况,并且 tomcat 不断占用大约 60% 的内存,突然崩溃并变为 0。我使用了 bash 脚本并在新服务器上每 5 分钟将其作为 cron 作业运行一次以检查tomcat是否关闭并自动重新启动。这会导致问题吗?脚本在下面提到
if [ "$(/etc/init.d/tomcat6 status)" == " * Tomcat servlet engine is not running." ]; then /etc/init.d/tomcat6 start; fi
请注意,我不是服务器配置方面的专家。我可以配置一个服务器来安装和运行所需的东西。
【问题讨论】:
-
JVM 是否相同?他们的 xmx、permgen... 的设置是一样的吗?
-
不...因为新服务器上的内存较小,我已将值设置为 128m 和 256m 的一半,而旧服务器上的值为 256m 和 512m。
-
也许 linux OOM 杀手正在杀死你的 tomcat。您应该在崩溃时检查 syslogs 中是否有任何不寻常的主菜。还要查看两台机器上的 jvm 版本。
-
我在旧服务器上使用 Ubuntu 10.04,在新服务器上使用 Ubuntu 12 64 位操作系统。这会消耗更多内存吗?
-
是的,64 位 JVM 的内存开销稍高。你能在两台服务器上运行 java -version 吗?
标签: memory ubuntu memory-management nginx tomcat6