对于以下场景,我应该如何调整 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) master 的其他任务当然需要内存,因此 JVM 最多可以达到 0.5 GB,但不会更多。
我的具体问题是,如果我保留一个更大的新代,就会发生大量复制,因为这些对象至少会存在一个小时;如果我让老一代变大,那么就会发生很多次要收集,那么我该怎么做呢?
最佳答案
测量你自己!
将 JVisualVM 附加到 Tomcat 进程并查看它在各种负载下的行为。您很可能会发现 Visual GC 插件非常有用。
参见 http://techblog.zabuchy.net/2012/monitoring-of-tomcat-with-visualvm-and-visualgc/寻找灵感。
关于Java:主从设置中的 GC 调优?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10846677/