`
BucketLi
  • 浏览: 195120 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
5a76a659-f8e6-3bf3-b39a-8ae8f7a0f9d9
Percolator与分布...
浏览量:5674
社区版块
存档分类
最新评论

JAVA crash后的不完全排查手段

 
阅读更多
打印GC,内存溢出dump
-server -Xms512m -Xmx512m -XX:NewSize=107m -XX:MaxNewSize=107m -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps  -Xloggc
:/home/admin/gc.log -XX:+HeapDumpOnOutOfMemoryError


gc log能够看到JVM 3代内存的大小状况,但感觉不太详细,只能初步查看到应用挂的时候内存是否正常.

PS:如果启动参数没有加打印gc log的参数,并且应用也不好重启的情况下,也可以动态打开gc(还没有试过,有场景了试下)
jinfo -flag PrintGCDetails=true [pid]


下面这个命令是在应用快挂掉时,手动进行应用的Thread Dump,确定crash时各个线程在做什么事.也就是能够一定程度确定出事范围.但是这个命令在java 进程突然退出时根本来不及执行.如果应用以较慢速度往宕机的方向发展或者应用执行速度非常慢,可以试着使用这个命令看下当时的所有线程在做什么事情.
kill -3 xxx > xxx.log


在java程序突然crash的时候,HeapDump是非常好用的.一般在启动参数中加入如下选项即可.
HeapDump的文件需要专用工具来分析,比如MAT(http://www.eclipse.org/mat/),可以导入HeapDump文件进行分析.然后给出可能出现问题的对象.一般快速crash都是某种对象或者资源实例爆发性增长造成.所以使用MAT能够很快找到原因.
XX:+HeapDumpOnOutOfMemoryError


另外一种HeapDump是主动去dump,而不是等到应用挂掉的时候利用启动参数去做。也可以参考
http://download.oracle.com/javase/6/docs/technotes/tools/share/jmap.html
jmap -dump:[live,]format=b,file=xxx  <pid>


在kill -3 pid 有时候无法使用的时候,jdk bin目录下的jstack也能起到类似作用。应用卡住挂起的时候,搜下这个日志locked标记,看是否都在等待某一个锁,再看堆栈最上层日志后查源码。
ps -aux | grep "java"  //查找到线程的pid
../java/jstack pid > xxx.log


另外简单介绍下一个比较牛x的工具,可以在线查看运行时某一个类没方法的输入输出等各种运行时信息而不必通过打日志重新发布排除故障-BTrace,这个暂时还没有使用到,找个时间试下。可以参考 毕老大 的详细介绍,这里也tips下:
http://blog.bluedavy.com/?p=185
分享到:
评论

相关推荐

    java1.8.zip

    6. **不兼容的库**:升级到Java 8后,某些旧版本的第三方库可能与新JDK不兼容。确保所有依赖库都是为Java 8设计的,或者已知能在Java 8上运行良好。 7. **JVM Bug**:尽管罕见,但确实存在JVM自身的bug可能导致崩溃...

    查找android crash堆栈中的C++代码位置的工具

    在Android应用开发中,尤其是涉及到原生C++代码时,可能会遇到应用程序崩溃的情况。...在实际开发中,保持良好的编码习惯,充分的测试,以及及时更新和维护调试信息,都是预防和解决这类问题的重要手段。

    java线上故障分析-线程dump,堆内存分析

    除了线程dump,**堆内存分析**也是线上故障排查的重要手段,尤其在处理内存泄漏、性能瓶颈等问题时。JVM提供了多种工具来辅助进行堆内存分析,如JVisualVM、MAT(Memory Analyzer Tool)等,它们可以帮助开发者可视...

    java troubleshooting guide for HP-UX.pdf

    综上所述,《Java™ Troubleshooting Guide for HP-UX》为用户提供了丰富的故障排除手段,涵盖了从崩溃分析到性能优化的各个方面。通过熟练掌握这些工具和技术,可以极大地提高在HP-UX平台上部署和维护Java应用程序...

    深入探索Android稳定性优化1

    4. **Java Crash**:Java Crash的处理涉及反混淆堆栈信息、获取logcat日志和Java堆栈信息。使用默认未捕获异常处理器(Thread.setDefaultUncaughtExceptionHandler)可以捕获并处理未被捕获的异常。 5. **Native ...

    java 虚拟机问题分析大全

    Crash文件是指当JVM遇到不可恢复的错误时自动生成的一系列诊断信息文件。这些文件通常包含有核心转储文件(core dump)和日志文件等,是诊断JVM崩溃的重要依据。 ##### 1. 核心转储文件分析 核心转储文件包含了崩溃...

    bugly SDKv2.6.5

    总之,Bugly SDKv2.6.5是Android开发者不可或缺的工具,能够极大地提高应用的稳定性,减少因错误导致的用户流失,并提供有效的故障排查手段。通过正确集成和配置这些文件,开发者可以有效地利用Bugly的优势,提升...

    程序崩溃异常捕获

    异常捕获的基本原理是通过编程手段监控程序的执行流程,当检测到异常情况(如除零错误、空指针引用、数组越界等)时,不立即让程序终止,而是触发预设的异常处理代码,收集相关信息,如异常类型、堆栈跟踪等,并保存...

    android崩溃日志收集

    ### Android崩溃日志收集 #### 一、概述 ...通过合理地利用系统资源和技术手段,不仅能够有效地监控应用状态,还能极大地方便开发人员进行故障排查和修复工作。希望对从事相关领域工作的朋友们有所帮助!

    Android优化技术详解

    通过以上介绍可以看出,Android应用优化涉及多个层面,包括但不限于性能优化、代码质量提升、网络请求管理以及应用稳定性增强等方面。开发者应结合实际应用场景灵活运用这些技术手段,不断改进和完善自己的产品,为...

Global site tag (gtag.js) - Google Analytics