常见的Java故障排除-故障排除准备

Java8官方文档

设置Java来进行故障排除

        1.更新Java版本:第一步,使用最新的Java版本,避免花时间在已经解决的Bug上面。往往,Java最新版本会修复运行时出现的Bug。使用最新版本的Java可以避免遇到那些已经发现的问题。
        2.设置需要调试的Java环境:不管是单机部署还是分布式应用,都要确保你的应用能够方便的更换Java版本和更改Java的命令行选项。

为JVM故障排除启用选项/标志

1. Enable core files
        如果Java崩溃,举个例子由于分段故障,操作系统会将core file( complete dump of the memory)保存到磁盘中。在Linux和 Solaris操作系统上,有时候默认是不会生成core file。为了能够在Linux和Solaris上获得core file,在启动应用之前,先在命令行中运行ulimit -c unlimited命令。
        注意:core files占用很大一部分磁盘空间,尤其是当运行了一个大型的Java堆时。
        考虑当程序崩溃时,你需要做什么来决定是否开启core files。你是否真的需要查看core filecore file对于许多Java用户是无用的。如果你想要使用本地的调试器例如gdb或者使用 Serviceability Agent来探察可能引起程序崩溃的原因,那么确保在程序启动之前开启core file。获取更多Serviceability Agent工具HSDBCLHSDB的详细信息,请阅读 Java Magazine
        很多时候,程序崩溃是重现不了的;因此在启动程序之前,尽可能的启用core files

2. Add -XX:+HeapDumpOnOutOfMemoryError to the JVM flags
        如果你使用了-XX:+HeapDumpOnOutOfMemoryError参数,那么如果你的应用运行时出现OutOfMemoryError,程序会将Java堆转储文件存放到磁盘中。使用The jhat Utility工具检查Java堆并找出哪些对象占用最多的内存。然后检查这些对象是否是已经不再使用的,但是依然存活了下来。
        和core files一样,堆转储文件也是非常大的,尤其是运行了一个很大的Java堆时。

3. Run a continuous Java flight recording
        这是一项商业功能

4. Add -verbosegc to the JVM command-line
        -verbosegc会记录有关Java垃圾收集器的基本信息。查看该日志会获取以下几点信息:

  • 垃圾收集器是否运行了很大一段时间?
  • 可用内存是否随着时间的推移而减少?
            当应用程序抛出一个OutOFMemoryError或者遇到性能问题,垃圾收集日志对诊断这类问题就会有帮助。因此默认开启-verbosegc开关可以帮助解决问题。
            注意:为了防止应用程序重启后删除以前的日志,请使用日志轮换。在JDK7以后,设置日志轮换可以使用UseGClogFileRotationNumberOfGCLogFiles这两个开关。这些开关的描述可参考Debugging Options for Java HotSpot VM

5. Print Java version and JVM flags
        在提交Bug给Java或向论坛寻求帮助之前,请先从日志文件中确认基础的信息。例如,将Java的版本和用到的JVM参数打印出来是非常有帮助的。
        如果你的应用程序是通过脚本启动的,简单的办法就是执行java -version命令来打印出Java版本并且在执行脚本之前打印出执行命令。另外一种选择是向JVM添加-XX+PrintCommandLineFlags-showversion参数。

6. Set up JMC JMX for remote monitoring
        JMX可用于使用Mission Control或Visual VM等工具远程连接Java应用程序。启用JMX没有性能开销。
        关于JMX技术查看这篇文章How to monitor JVM using JMX Technology
        另一种在Java应用程序已经启动后启用JMX的方式是使用ManagementAgent.start诊断命令。运行jcmd <pid> help ManagementAgent.start命令可以获取开关列表,这些开关可以和命令一起发送。
        更多关于jcmd的命令可以查看The jcmd Utility

收集相关数据

        如果你的应用程序遇到问题了并且你想进一步调试问题,那么请确保在重启系统之前你已经收集了任何相关数据,尤其是那些重启会删除原先文件的系统。
        以下是一些从中收集数据的重要文件:

  • Core files for crash issues
  • hs_err printed text file for Java crashes
  • Log files: Java and application logs.
  • Java heap dumps for -XX:+HeapDumpOnOutOfMemoryError.
  • Java flight recordings (if enabled) - If the problem didn't terminate the application, dump the continuous recordings.
            如果应用程序已经停止响应,那么收集以下文件信息:
  • Stack traces: Take several stack traces using jcmd <pid> Thread.print before restarting the system
  • Dump flight recordings (if enabled).
  • Force a core file: If the application can't be closed properly, then stop the application and force a core file using kill -6 <pid> on Linux or Solaris systems
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容