我正在为我正在使用的团队设置一个开发服务器。 他们开发JavaEE应用程序,这些应用程序被部署并作为WAR文件运行。 他们将不可避免地需要在这台服务器上不断运行一两个应用程序。
还有一些其他的Java应用程序也需要在服务器上运行,包括Jenkins,Artifactory和其他一些作为WAR部署的内部工具。
Jenkins和Artifactory默认运行在自己的servlet容器中,以这种方式设置它们非常简单。 但是在我看来,通过让所有WAR在Tomcat的一个实例中运行,可能会节省一些内存和性能,而不是为Jenkins运行Winstone,为Artifactory运行Jetty,为Tomcat运行内部工具。
我们是否可以看到使用单个servlet容器带来的重大好处?
在同一个JVM中运行多个WAR有一些内存使用优势,但另一方面,如果使用一个大型JVM,则会出现更多争用,并可能导致更大的GC完全停顿。 一些JVM应用程序(如Jenkins)可能会占用大量内存,可能会驱动您的解决scheme。
作为一个粗略的尺寸指南,我会做以下几点: