在生产Java服务器中打开GC日志记录是否常见?

时间:2013-03-09 06:31:51

标签: java java-ee garbage-collection jvm

我在一些地方看到[1]人们开始在生产服务器(关键任务)中进行GC登录,例如

java -server -Xms1024m -Xmx1024m -XX:NewSize=256m \
     -XX:MaxNewSize=256m \
     -XX:+UseConcMarkSweepGC \
     -XX:CMSInitiatingOccupancyFraction=70
     -XX:+PrintGCDetails \
     -XX:+PrintGCDateStamps \
     -XX:+PrintTenuringDistribution \
     -Xloggc:logs/gc.log \
     -Djava.awt.headless=true
     -Dcom.sun.management.jmxremote -classpath ...

这些天是否推荐生产环境中的做法?

更新:我已经在Oracle中添加了一个链接[2],建议在生产服务器上监控GC。

来源:

[1] https://serverfault.com/questions/121490/java-opts-xxprintgcdetails-affect-on-performance

[2] http://docs.oracle.com/cd/E24290_01/coh.371/e22838/deploy_checklist.htm#CHHFADDF

2 个答案:

答案 0 :(得分:46)

,这是一种常见做法。这通常是强烈推荐,我在下面举例说明和参考。

为什么GC日志记录适用于生产Java服务器:

  1. 最小开销 - GC日志记录对整体系统性能的最小开销

    • 这是要求保护的,例如作者:Charlie Hunt,前JVM性能架构师,Java Performance book
    • 的共同作者
    • 所有正在运行的world record SPEC Benchmarks Java Enterprise软件都在运行生产服务器并启用了GC日志记录。这证实了日志记录的开销很低,而且日志记录路径也得到了发布基准测试结果的性能专家的高度调整。
  2. 长期记录绝对应用程序性能的分析至关重要。必须始终启用GC日志记录,以便管理员能够观察GC行为并相应地调整应用程序。

答案 1 :(得分:-2)

绝对不是。

如果存在无法在QA系统上重现的问题,您只能以这种方式加载prod服务器。即便如此,只有在短时间内收集数据然后才能恢复正常的“精益”模式。