tomcat上的垃圾收集时间在很多小实例上比在1个大实例上更好吗?

时间:2015-04-11 18:31:55

标签: java tomcat garbage-collection

现在我们的服务器上有一个Tomcat实例,分配了大约55 GB的内存。我们也在运行G1垃圾收集器。

我们在tomcat服务器上运行了很多主机,每个主机本身没有很多流量,但所有这些主机总共加起来有相当大的流量。 G1垃圾收集器每隔30秒左右调用一次混合GC大约2秒钟(这就是我们的最大暂停时间配置为,我们知道它太高并计划调整它)。

我的问题是,如果我将这些主机拆分到同一台机器上的4 x 14 gig tomcat实例,或者说,7 x 8 gig实例将有助于提高垃圾收集效率并消除暂停或需要用于G1以经常混合GC。

总之,我的垃圾收集在许多小堆上会比在一个大堆上更有效吗?

1 个答案:

答案 0 :(得分:1)

很难给出一个是/否答案:)

跨多个tomcat实例拆分应用程序将使它们更易于维护。

缺点: -

  1. 配置堆大小 - 您可能需要手动配置每个tomcat的堆大小 实例,需要一些测试来确定每个的大小 tomcat实例,但你可以使用你当前的假设 根据流量和分配对应用程序进行分类 相应的记忆。例如,您的应用程序具有最高 流量明显大于其他应用可能正在运行的流量 其'拥有自己的tomcat实例,其固定堆大小为2GB。
  2. 路由网址 - 现在您正在划分应用程序 多个tomcat实例,几个URL必须路由到tomcat 实例在另一个端口上侦听,这个端口之前没有问题 所有请求总是以一个tomcat实例结束。
  3. 优点: -

    1. 缩短GC时间 - 繁忙的流量会带来更多的工作,并且很可能会提高您的对象分配率,因此如果您在单独运行该应用程序 tomcat实例,一个应用程序中的GC不会影响所有其他应用程序 有自己的实例。与单个55gig堆相比,您的堆相对较小,GC时间将大大减少。
    2. 减少占用空间 - 现在您正在拆分您的实例,您的个人tomcat 堆大小可能低于32GB,这将使您可以利用 压缩的糟糕可能会减少你的内存占用 的应用程序。
    3. 高可用性 - 让我们说您经常访问的应用程序遇到了 OutOfMemoryException由于意外的流量,所有其他     应用程序仍在运行,您只需要重新启动/分析     只有一个应用程序的堆转储,这使事情变得容易     分析55 gig堆:)
    4. 显而易见,它有几个优点,但你应该谨慎行事:)