您的位置:首页 > 编程语言 > Java开发

解决java问题

2016-04-21 21:26 513 查看
解决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是否运行很长时间?
空闲内存是不是会逐渐减少?
GC日志可以在抛出OutOfMemoryError异常或出现性能问题帮助诊断问题;因此,默认开启-verbosegc选项帮助你排除问题。
注意:用日志循环,这样在应用重启时不会删掉以前的日志文件。从jdk7开始,UseGClogFileRotation和NumberOfGCLogFiles可以用来设置循环日志。见Debugging Options
for Java HotSpot VM。
4)打印java版本和jvm选项:在提出bug或到论坛上寻求帮助之前,手边要有基本信息的日志文件。在jvm参数中增加-XX:+PrintCommandLineFlags和-showversion。
5)设置JMC JMX来进行远程监控:JMX可以被用来连接远程应用上,用像Mission Control或Visual VM这样的工具。见How to monitor JVM using JMX Technology

3、在你的应用出现问题时,你想进一步调试,确保在重启之前收集了相关信息,特别是重启会删除以前的文件的情况下。
下面是需要收集的重要文件:

崩溃时的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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: