多个 Java servlet 容器的开销

多个 Java servlet 容器的开销

我正在为我所在的团队设置一个开发服务器。他们开发 JavaEE 应用程序,这些应用程序以 WAR 文件的形式部署和运行。他们不可避免地需要在此服务器上不断运行其应用程序的一个或两个实例。

还有许多其他 Java 应用程序也需要在服务器上运行,包括 Jenkins、Artifactory 和一些其他以 WAR 形式部署的内部工具。

Jenkins 和 Artifactory 默认在自己的 servlet 容器中运行,以这种方式设置它们非常简单。不过,我认为,如果让所有 WAR 在一个实例(例如 Tomcat)中运行,而不是让 Winstone 运行 Jenkins、Jetty 运行 Artifactory 和 Tomcat 运行内部工具,可能会节省一些内存和性能。

我们是否可以看到使用单个 servlet 容器所带来的显著好处?

答案1

在同一个 JVM 中运行多个 WAR 具有一定的内存使用优势,但另一方面,使用一个大型 JVM 会存在更多争用,并且可能出现更长时间的完整 GC 暂停。某些 JVM 应用(例如 Jenkins)可能非常占用内存,这可能会影响您的解决方案。

作为粗略的尺寸指南,我将执行以下操作:

  • 保留 500MB 给操作系统
  • 每个 JVM 分配 1-2GB
  • 使用这些数字来确定您可以在一个机器上运行多少个 JVM。依靠交换来获取活动的 JVM 不是一个好主意。
  • 将初始堆 (-Xms) 和最大堆 (-Xmx) 设置为相同的值

相关内容