java - 许多小实例在 tomcat 上的垃圾收集时间是否比在 1 个大实例上更好?

标签 java tomcat garbage-collection

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

我们在tomcat服务器上运行了很多台主机,每台主机本身的流量并不大,但是它们加起来的流量还是很可观的。 G1 垃圾收集器最终每 30 秒左右调用一次混合 GC,持续大约 2 秒(这是我们配置的最大暂停时间,我们知道它太长并计划对其进行调整)。

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

总而言之,我的垃圾回收在许多小堆上是否比在一个大堆上更有效?

最佳答案

好吧,很难给出是/否的答案:)

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

缺点:-

  1. 配置堆大小 - 您可能需要为每个 tomcat 手动配置堆大小 实例,需要一些测试来确定每个实例的大小 tomcat 实例,但您可以按照当前的假设进行 根据流量对应用程序进行分类并分配 相应地内存。例如,您的应用程序具有最高 流量明显大于可能运行的其他应用程序 它自己的 tomcat 实例具有 2GB 的固定堆大小。
  2. 路由 URL - 现在您要将应用程序划分为 多个 tomcat 实例,很少有 URL 必须路由到 tomcat 在另一个端口上监听的实例,这个端口不像之前那样有问题 所有请求总是在单个 tomcat 实例上结束。

优点:-

  1. 减少 GC 时间 - 繁忙的流量会导致更多的工作并且很可能会增加您的对象分配率,因此如果您在单独的环境中运行该应用程序 tomcat 实例,一个应用程序中的 GC 不会影响所有其他应用程序,因为它们 有自己的实例。与单个 55gig 堆相比,您的堆将相对较小,并且 GC 时间将大大减少。
  2. 减少足迹 - 现在您正在拆分您的实例,您的个人 tomcat 堆大小可能会降至 32GB 以下,这将使您能够利用 压缩的 Oops 可能会减少你的内存占用 应用程序。
  3. 高可用性 - 假设您经常访问的应用程序遇到 OutOfMemoryException 因为意外的流量,所有其他 应用程序仍在运行,您只需要重新启动/分析 只有一个应用程序的堆转储,这使事情比 分析 55 gig 堆 :)

所以很明显它有几个优点,但你应该谨慎使用:)

关于java - 许多小实例在 tomcat 上的垃圾收集时间是否比在 1 个大实例上更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29581557/

相关文章:

java - 如何在点击后退按钮 5 次时显示插页式广告

Java JLabel 多行高度

html - HTML 图像未加载的问题

java - java拆分类时spring失败

Javascript嵌套函数性能

java - 以编程方式设置信任库

java - HashMap使用方式的设计实现

apache - 如何以编程方式查询 Windows 上 Apache TomCat 7 的当前内存设置?

java - 如何获取 Java 9 打印有关 GC 的 Java 8 样式信息

android - GC_Concurrent Freed 和 Android 内存