2

对于以下情况,我应该如何调整 GC(例如收集器的类型、堆的最小/最大大小、新/旧代的大小、伊甸园与幸存者的比率等)?(我使用的是 Sun JDK 6,可用内存为 1GB)。

1)一台运行tomcat的master机器,它又运行一个web应用程序来显示master下各种节点机器的状态

2) 节点状态消息包括其 CPU、内存、IO 使用率等内容;典型的消息大小为 1KB

3)一个节点每秒向master发送3条这样的消息,一个master下面有10个节点

4) master 必须将最后一小时的状态数据保存到内存中,所以 master 必须保存在内存中的总状态数据为:3kb * 3600 * 10 = 108MB

5) 主服务器当然需要内存来完成其他任务,因此 JVM 最多可以达到一半 GB,但不会更多。

我的具体问题是,如果我保留更大的新一代,会发生大量复制,因为这些对象至少可以存活一个小时;如果我保持老一代更大,那么会发生很多次要收藏,那么我该怎么做呢?

4

2 回答 2

4

自己测量!

将 JVisualVM 附加到 Tomcat 进程并查看它在各种负载下的行为。您很可能会发现 Visual GC 插件非常有用。

有关灵感,请参阅http://techblog.zabuchy.net/2012/monitoring-of-tomcat-with-visualvm-and-visualgc/

于 2012-06-01T08:13:32.180 回答
1

在您确定真正的性能问题之前,我什至不会考虑 GC 调整。默认值可能会正常工作。

基本上这是一个相当 GC-light 的应用程序。你说的是每秒大约 100k 的内存分配,以及大约 100mb 的工作集。对于现代服务器来说,这很容易处理。

于 2012-06-01T08:42:50.777 回答