我对 jvm 的体验主要是为多个应用程序维护一个 tomcat 容器。我发现自己总是不确定 -Xms -Xmx -Xmn -XX:PermSize -XX:MaxPermSize 设置与我初始化我的 tomcat 实例的比例。
我知道这将根据我正在运行的应用程序的数量和大小而有所不同。我不想让我的手握住,但任何人都有关于如何测试您的负载需求以及设置的良好比率的提示或资源?
提前致谢。
更新:
在这种情况下,盒子是一个 slicehost vps:
64 位 Linux 1024 Ram 和 1.6 jdk Sun(虽然我可能会改变)
Tomcat 通过 mod_jk 位于 Apache 后面。我还运行一个 mysql 和一个邮件服务器(都是低使用率的)。
在 tomcat 上,我只运行了一个 jruby 和两个 railo (cfml) 应用程序,以后应该会添加更多。
我正在寻找更多的提示/指针,而不是确切的设置规范。因为几乎一切都可能发生变化。
您需要提供更多信息:
1) 盒子上有多少内存可用?Tomcat是唯一运行的吗?
2) 这是 32 位还是 64 位 VM?
3)这个盒子上有多少个CPU/内核?
4) 你正在运行什么主要版本的jdk?1.4、5 还是 6?
这些问题的答案将允许您为堆设置边界。
一旦你克服了这个问题,可能需要回答有关应用程序的问题——有多少对象是长期存在的(即缓存),有多少是短期存在的(在它们超出范围之前不到 5 秒)。
这些问题将告诉我们堆的百分之几可以用于伊甸园,以及需要为老年代使用多少百分比。
更新
好吧,如果您的 Tomcat 长时间运行,那么添加“-server”标志可能会有所帮助。鉴于您的限制,除非您从内到外了解您的应用程序,否则最好将其留给人体工程学来确定最佳比率和收集器。Java 调优与其说是一门科学,不如说是一门艺术。从这里开始:http: //java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html,然后寻找 GCHisto 和 VisualGC 等工具来帮助您可视化 VM 内部的情况。