解决java问题
1、升级java版本:第1步,使用java最新版本,避免把时间浪费在java已经修复的问题上。经常会有一些java运行时出现的BUG,在最新的版本中被修复。
2、设置jvm选项,收集相关数据来解决问题:
1)开启core文件:如果java崩溃,例如因为一个段错误(segmentation fault),OS会保存一个core文件,在linux中,core文件通常默认是关闭的。在启动应用前开启core文件,开启core文件的方法是在命令行执行ulimit -c unlimited。
注意:core文件会占用很大一部分磁盘空间,特别是在java堆很大的情况下。
很多时候,java崩溃是很难重现的,因此,要在启动应用前开启core文件夹。(For more details about Serviceability Agent's HSDB and CLHSDB tools, read the article from Java Magazine.)
2)增加jvm参数-XX:+HeapDumpOnOutOfMemoryError,用jhat工具找出堆中占用了较大的空间,并且不再被使用(或不可达),但仍然存活的对象。
像core文件一样,堆转存文件也会很大,在java堆很大的情况下。
3)在jvm命令行增加-verbosegc:-verbosegc记录GC的基本信息到日志中。这份日志会帮助你找出以下问题:
- GC是否运行很长时间?
- 空闲内存是不是会逐渐减少?
- 崩溃时的core文件;
- hr_err打印的java崩溃时的文本文件;
- 日志文件:java或是应用产生的日志;
- 通过-XX:+HeapDumpOnOutOfMemoryError转存的文件;
- Stack traces: Take several stack traces using jcmd <pid> Thread.print before restarting the system.
- 强制生成一个core文件:如果应该不能关闭,可以通过在命令行执行kill -6 <pid>产生core文件。
4、要想使java应用易于调试,使用一个日志框架是一个好的途径,见Java Logging Technology。
引用:http://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/prepapp001.html