我应该如何调优GC (例如,收集器的类型、堆的最小/最大大小、新/旧gen的大小、Eden与survivor的比率等)对于下面的场景?(我使用的是Sun JDK 6,可用内存为1 1GB)。
1)运行tomcat的主机,该主机依次运行web应用程序以显示主机下的各个节点机器的状态
2)节点状态消息包括CPU、内存、IO使用率等信息,典型的消息大小为1KB
3)一个节点每秒发送3条这样的消息给master,一个master下有10个节点
4)主机必须将过去一个小时的状态数据保存到内存中,因此主机必须保存在内存中的总状态数据为: 3kb * 3600 * 10 = 108MB
5)主服务器当然需要内存来完成其他任务,因此JVM可以获得半GB的内存,但不会更多。
我的具体问题是,如果我保持一个更大的新一代,将发生大量复制,因为这些对象将至少存活一个小时;如果我保持旧的一代更大,那么将发生许多小收集,那么我该如何处理呢?
发布于 2012-06-01 16:13:32
测量一下你自己!
将JVisualVM附加到Tomcat进程,并查看它在各种负载下的行为。您很可能会发现Visual GC插件非常有用。
请参阅http://techblog.zabuchy.net/2012/monitoring-of-tomcat-with-visualvm-and-visualgc/获取灵感。
发布于 2012-06-01 16:42:51
在找出真正的性能问题之前,我甚至不会费心去考虑GC调优。默认设置可能会工作得很好。
基本上,这是一个相当轻量级的GC应用程序。您谈论的是每秒100k左右的内存分配,以及大约100mb的工作集。对于现代服务器来说,这是相当微不足道的。
https://stackoverflow.com/questions/10846677
复制相似问题