我在一些地方看到[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
答案 0 :(得分:46)
是,这是一种常见做法。这通常是强烈推荐,我在下面举例说明和参考。
为什么GC日志记录适用于生产Java服务器:
最小开销 - GC日志记录对整体系统性能的最小开销。
长期记录绝对对应用程序性能的分析至关重要。必须始终启用GC日志记录,以便管理员能够观察GC行为并相应地调整应用程序。
答案 1 :(得分:-2)
绝对不是。
如果存在无法在QA系统上重现的问题,您只能以这种方式加载prod服务器。即便如此,只有在短时间内收集数据然后才能恢复正常的“精益”模式。