解决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
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
相关文章推荐
- spring Ioc
- 24点问题的java实现
- 关于eclipse 里面,运行是找不到主类的问题
- Java指定长度随机生成的字符串,且这个字符串必须包含大小写字母和数字
- Java中HashSet详解
- JAVA打印简易版日历
- Spring 7大功能模块的作用
- eclipse安装red5插件
- 利用Spring的AbstractRoutingDataSource解决多数据源的问题
- jdk中密钥和证书管理工具keytool常用命令详解
- Java之implements
- java基础语法
- 使用maven给spring项目打可直接运行的jar包(配置文件内置外置的打法)
- 《struts2》指定多个配置文件和默认Action
- java环境下利用blind xxe来列目录和文件读取
- java时间戳正序和倒序
- java中功能选项的移除指南(二)
- java 读取properties + 类反射的应用
- Java 重写(Override)与重载(Overload)
- java 中变量存储位置的区别 .