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

我在几个地方看到[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

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

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

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

    • 例如,前JVM性能架构师兼Java性能书的共同作者Charlie Hunt声称这一点。
    • 所有世界纪录运行Java企业软件的SPEC基准测试都在运行生产服务器,并启用了GC日志记录。 这证实了日志记录具有较低的开销,并且日志记录路径由发布基准测试结果的性能专家高度调整。
  2. 长期日志记录 对于分析应用程序性能绝对至关重要 。 必须始终启用GC日志记录,以便管理员能够观察GC行为并相应地调整应用程序。

当然不。

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