rnd*_*gen 8 java performance garbage-collection jvm
我在Linux 64bit上运行一个具有8个核心CPU和6 GB内存的应用程序服务器.
服务器必须具有高响应性.
经过一番检查后,我发现在服务器上运行的应用程序创建了相当多的短期对象,并且只有大约200~400 MB的长寿命对象(只要没有内存泄漏)
阅读http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html后, 我使用这些JVM选项
-server -Xms2g -Xmx2g -XX:MaxPermSize=256m -XX:NewRatio=1 -XX:+UseConcMarkSweepGC
Run Code Online (Sandbox Code Playgroud)
结果:次要GC需要0.01~0.02秒,主要GC需要1~3秒,小GC不断发生.
如何进一步改进或调整JVM?
堆大小?但GC需要更多时间吗?
更大的NewSize和MaxNewSize(适合年轻一代)?
其他收藏家?并行GC?
让主要GC更频繁地进行是一个好主意吗?如何?
结果:次要GC需要0.01~0.02秒,主要GC需要1~3秒,小GC不断发生.
除非您报告暂停,否则我会说CMS收集器正在执行您要求它执行的操作.根据定义,CMS将使用比串行和并行收集器更大的CPU百分比.这是您为低暂停时间支付的罚金.
如果你看到1到3秒的暂停时间,我会说你需要做一些调整.我不是专家,但看起来你应该从减少CMSInitiatingOccupancyFraction默认值92 的值开始.
增加堆大小将提高GC的"吞吐量".但是,如果您的问题是长时间暂停,增加堆大小可能会使问题变得更糟.
| 归档时间: |
|
| 查看次数: |
16102 次 |
| 最近记录: |