`
blueswind8306
  • 浏览: 127019 次
  • 来自: ...
社区版块
存档分类
最新评论

如何看GC Debug日志内容

阅读更多
在学习GC机制时,发现有些东西通过普通的jvm参数是很难看到的,比如在ParallelGC触发悲观机制时,如果想看到此时新生代的平均晋升大小似乎就不可能的,发现在JDK源代码中有类似下面这样的if块:
if (PrintGCDetails && Verbose) {
  gclog_or_tty->print(result ? "  do scavenge: " : "  skip scavenge: ");
  gclog_or_tty->print_cr(" average_promoted " SIZE_FORMAT
    " padded_average_promoted " SIZE_FORMAT
    " free in old gen " SIZE_FORMAT,
    (size_t) policy->average_promoted_in_bytes(),
    (size_t) policy->padded_average_promoted_in_bytes(),
    old_gen->free_in_bytes());
  if (young_gen->used_in_bytes() <
      (size_t) policy->padded_average_promoted_in_bytes()) {
    gclog_or_tty->print_cr(" padded_promoted_average is greater"
      " than maximum promotion = " SIZE_FORMAT, young_gen->used_in_bytes());
  }
}

这里即使打开了-XX:+PrintGCDetails选项也是不行的,因为只有在Debug版本中,才能够设置-XX:+Verbose参数。

Debug版本的JDK的下载地址如下:
http://download.java.net/jdk6/6u25/promoted/b03/binaries/

或者使用如下方法自己搞一个Debug的Build(还没有试):
http://www.softwareengineeringsolutions.com/thoughts/Java-Debug-Build.htm

有了Debug版本的JDK后,在jvm参数中需要增加以下值:
引用
-Xloggc:./gc.log
-XX:+PrintGCDetails
-XX:+Verbose


运行程序后再看看gc.log,可以看到日志信息多了很多,找到触发fullGC的地方,可以看到以下日志:
引用
full after scavenge:  average_promoted 6291504 padded_average_promoted 6291504 free in old gen 4194256

很清楚,是因为MinorGC后的悲观策略检查发现平均晋升大小(6MB)>旧生代剩余大小(4MB)导致的FullGC。
0
1
分享到:
评论

相关推荐

    c#log日志类和日志分析器(源码)

    在C#中,有多种方式实现日志记录,例如使用System.Diagnostics.Trace和Debug类,或者使用第三方库如Log4Net、NLog和Serilog等。 日志类通常包含以下功能: 1. **日志级别设置**:允许用户根据需要选择记录哪些级别...

    [JAVA·初级]GC垃圾回收机制编程开发技术共14页.p

    例如,`-Xlog:gc*=debug:file=gc.log` 参数可以开启详细的GC日志输出。 总之,【JAVA·初级】GC垃圾回收机制是Java开发者必须掌握的基础知识,深入理解和运用GC机制,能有效提升程序的性能和稳定性。在实践中不断...

    EM 12c OMS日志、跟踪文件管理

    通过修改其中的设置,可以更改日志级别(如DEBUG、INFO、WARN等)、文件大小限制以及备份策略。 例如,要增加日志文件的备份数量,可以修改log4j.appender.emlogAppender.MaxBackupIndex和log4j.appender....

    B站日志系统的演进之路.pdf

    - 等级(level):日志的严重性等级,包括FATAL、ERROR、WARN、INFO、DEBUG; - 应用ID(app_id):标识日志来源,保持与服务树一致,使用部门.项目.应用的三级结构,并确保全局唯一性; - 实例ID(instance_id):...

    java9中gc log参数迁移

    例如,你可以选择记录所有GC事件(`all`),或者特定的事件如`gc`,并且可以设置日志级别,如`info`、`debug`等。 2. **`output`** 部分定义日志输出的位置,可以是标准错误(`stderr`)、标准输出(`stdout`)或...

    服务器性能优化

    通过控制台或配置文件,可以定制日志级别(如DEBUG、INFO、WARN等)、日志输出目标(如控制台、文件、syslog等)以及特定组件的日志。合理设置能确保关键信息被记录,同时避免过多的无关日志导致磁盘空间浪费。 2. ...

    Java线上故障排查方案.rar

    1. 日志级别:理解DEBUG、INFO、WARN、ERROR等不同级别的含义,根据情况调整日志级别以获取所需信息。 2. 异常堆栈:通过查看错误堆栈跟踪,可以定位到问题发生的具体代码行。 3. 日志切割:定期或按大小切割日志,...

    D17214GC10 Oracle Database 10g Program with PLSQL

    本课程“D17214GC10 Oracle Database 10g Program with PLSQL”主要关注如何使用PL/SQL与Oracle 10g数据库进行交互,开发高效、安全的数据库解决方案。通过学习,你可以掌握以下关键知识点: 1. **Oracle数据库基础...

    Android应用程序内存泄漏的分析.pdf

    1. DDMS(Dalvik Debug Monitor Server):在Android开发中,DDMS是一个调试工具,它可以用于查看进程信息、线程、堆栈等,并且可以模拟来电、短信、电池等状态,还可以用于查看设备日志。它可以帮助开发者捕获Heap...

    VI_应用随身小助手.pdf

    VI 应用随身小助手是江杰平安银行开发的一款应用监控工具,主要用于应用启动和状态管理、组件暴露和控制、应用诊断和在线 Debug 等功能。下面是 VI 应用随身小助手的详细知识点: 应用启动和状态管理 VI 应用随身...

    工具的聚合、链接及标准化—— XPocket实操演示及解析.pdf

    XPocket Case4 – GC异常,但没开GC日志? XPocket Case4 演示了如何使用XPocket解决GC异常问题。传统的排查方式是重启应用加参数。XPocket提供了JNI插件,能够使用JNI插件动态开启GC日志打印,保留现场。 XPocket...

    Troubleshooting Guide for Java

    - **触发GC**:`jcmd &lt;pid&gt; GC.run` - **获取线程堆栈**:`jcmd &lt;pid&gt; Thread.print` #### 四、Native Memory Tracking Native Memory Tracking允许开发者跟踪Java应用程序中的本机内存使用情况。这对于分析由于本...

    Tomcat调优

    1. **日志级别**:根据需求调整日志级别(DEBUG、INFO、WARN、ERROR),避免过度的日志输出影响性能。 2. **日志切割**:使用Log4j或Logback进行日志切割,避免单个日志文件过大。 3. **异步日志**:启用异步日志...

    java平台故障分析与诊断

    关键的日志级别包括DEBUG、INFO、WARN、ERROR和FATAL,它们分别对应不同的严重程度。日志框架如Log4j、Logback和SLF4J可以帮助我们管理和格式化日志输出。 2. **性能监控**:Java平台提供了JMX(Java Management ...

    java做的监控应用实例

    Java中常用的日志框架有Log4j、Logback和SLF4J,它们允许开发者设置不同的日志级别,如ERROR、WARN、INFO、DEBUG等,以适应不同场景的需求。结合日志聚合工具如Logstash和ELK Stack(Elasticsearch、Logstash、...

    android下如何调试程序,Eclipse使用DDMS

    Dalvik调试监视服务(Dalvik Debug Monitor Service, DDMS)是Android SDK提供的一个强大的调试工具,它集成了任务管理器、文件浏览器、模拟控制台以及日志控制台等功能。通过DDMS,开发者不仅可以监控模拟器或真实...

    log2csv:一个简单的工具将 Go gctrace 转换为 csv

    日志文件 一个简单的工具将 Go gctrace 转换为 csv 用法 Usage1: log2csv -i gc.log -o gc.csv Usage2: GODEBUG=gctrace=1 your-go-program 2&gt;&1 | log2csv -o gc.csv -i="stdin": The input file -o="stdout": ...

    JVM01-课程介绍1

    此外,课程还将涉及GC日志的解读和分析,这对于诊断内存泄漏等问题至关重要。 课程还将涵盖线程堆栈分析、内存dump的处理以及内存分析工具的使用,这些都是解决多线程问题和内存管理问题的关键。同时,fastthread...

    java面试题20道(适合工作1~3年)(附答案).docx

    7. **Log4j的日志级别**:Log4j提供了ERROR、WARN、INFO、DEBUG四个主要的日志级别,优先级从高到低排列,ERROR用于严重错误,WARN表示警告,INFO用于一般信息,DEBUG用于调试信息。 8. **拦截器与过滤器的区别**:...

    alibbJava开发手册高清最新版.rar

    - 日志级别:DEBUG、INFO、WARN、ERROR,根据需要调整日志级别。 - 使用SLF4J与Logback/Log4j等日志框架,统一日志输出。 10. **性能优化**: - 深入理解JVM内存模型,合理设置堆大小,避免内存溢出。 - 代码...

Global site tag (gtag.js) - Google Analytics