java crash 是什么,JVM崩溃是什么原因
各位老铁们好,相信很多人对java crash 是什么都不是特别的了解,因此呢,今天就来为大家分享下关于java crash 是什么以及JVM崩溃是什么原因的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!
android中的native crash指的是什么大概有几种情况
android framework分为java和native两层
native运行于C的runtime,高效。一般java层只是封装,通过jni访问native底层HAL,driver的crash也会导致上层的crash
,有效利用Log信息并对其进行分析与实时的监控管理,对于分析Android手机发生Crash的原因具有极为重要的作用。
Android Log文件类型
由于Android上的应用程序千差万别,出现的问题也不尽相同。不过Bug类型还是有规律可循的,可以根据生成的Log文件找到相应的错误,通常错误信息里记录了错误的大致位置,据此可以捕获到问题的关键信息。
Log文件记录着每次操作的信息,在出现问题后可以借助log信息分析以达到解决问题的目的,Log文件类型主要分为以下几种:
(1) Logcat: Main缓存日志,通过运行logcat命令,可以获得系统中使用的标记和优先级的列表,也可以加上过滤器进行表达式限制,只输出测试人员及研发人员感兴趣的标记-优先级组合。
……………………
(2) Bugreport: Java应用程序Crash时会产生一个Bugreport文件,该文件主要包括三个方面的内容:
Dumpstate:内存信息,Cpu信息,Procrank信息,系统日志,Vm Trace信息等。
Build.Prop:当前版本、当前命令、显示系统Build的一些属性等;
Dumpsys:Dump Of Service Meminfo(显示某个进程更详细的内存消耗情况以及Native And Java(Dalvik)堆栈的统计数);
(3) Crashdump:每次Crash都会产生一个Crashdump文件,文件包括主日志,Java堆栈信息,本地调用堆栈,虚拟机/进程堆,Log缓存,内存信息,进程列表,Modem信息,Adb Log等信息;
(4) Bratlog:测试用例及详细信息;
(5) Logalong:事件,如手机通讯功能信息等;
(6) Pullfs: Traces(Java堆栈信息);
(7) Procrank: Uss(Unique Set Size)值,进程独自占用的物理内存。
转载
...的某些机器的datanode和node manager会突然crash掉
一、首先要知道此前提转载
若在windows的Eclipse工程中直接启动mapreduc程序,需要先把hadoop集群的配置目录下的xml都拷贝到src目录下,让程序自动读取集群的地址后去进行分布式运行(您也可以自己写java代码去设置job的configuration属性)。
若不拷贝,工程中bin目录没有完整的xml配置文件,则windows执行的mapreduce程序全部通过本机的jvm执行,作业名也是带有“local"字眼的作业,如 job_local2062122004_0001。这不是真正的分布式运行mapreduce程序。
估计得研究org.apache.hadoop.conf.Configuration的源码,反正xml配置文件会影响执行mapreduce使用的文件系统是本机的windows文件系统还是远程的hdfs系统;还有影响执行mapreduce的mapper和reducer的是本机的jvm还是集群里面机器的jvm
二、本文的结论
第一点就是: windows上执行mapreduce,必须打jar包到所有slave节点才能正确分布式运行mapreduce程序。(我有个需求是要windows上触发一个mapreduce分布式运行)
第二点就是: Linux上,只需拷贝jar文件到集群master上,执行命令hadoop jarPackage.jar MainClassName即可分布式运行mapreduce程序。
第三点就是:推荐使用附一,实现了自动打jar包并上传,分布式执行的mapreduce程序。
附一、推荐使用此方法:实现了自动打jar包并上传,分布式执行的mapreduce程序:
请先参考博文五篇:
Hadoop作业提交分析(一)~~(五)
引用博文的附件中EJob.java到你的工程中,然后main中添加如下方法和代码。
public static File createPack() throws IOException{
File jarFile= EJob.createTempJar("bin");
ClassLoader classLoader= EJob.getClassLoader();
Thread.currentThread().setContextClassLoader(classLoader);
return jarFile;
}
在作业启动代码中使用打包:
Job job= Job.getInstance(conf,"testAnaAction");
添加:
String jarPath= createPack().getPath();
job.setJar(jarPath);
即可实现直接run as java application在windows跑分布式的mapreduce程序,不用手工上传jar文件。
附二、得出结论的测试过程
(未有空看书,只能通过愚笨的测试方法得出结论了)
一.直接通过windows上Eclipse右击main程序的java文件,然后"run as application"或选择hadoop插件"run on hadoop"来触发执行MapReduce程序的测试。
1,如果不打jar包到进集群任意linux机器上,它报错如下:
[work] 2012-06-25 15:42:47,360- org.apache.hadoop.mapreduce.Job-10244 [main] INFO org.apache.hadoop.mapreduce.Job- map 0% reduce 0%
[work] 2012-06-25 15:42:52,223- org.apache.hadoop.mapreduce.Job-15107 [main] INFO org.apache.hadoop.mapreduce.Job- Task Id: attempt_1403517983686_0056_m_000000_0, Status: FAILED
Error: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class bookCount.BookCount$BookCountMapper not found
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:1720)
at org.apache.hadoop.mapreduce.task.JobContextImpl.getMapperClass(JobContextImpl.java:186)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:721)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:339)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:162)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:157)
Caused by: java.lang.ClassNotFoundException: Class bookCount.BookCount$BookCountMapper not found
at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:1626)
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:1718)
... 8 more
# Error:后重复三次
2012-06-25 15:44:53,234- org.apache.hadoop.mapreduce.Job-37813 [main] INFO org.apache.hadoop.mapreduce.Job- map 100% reduce 100%
现象就是:报错,无进度,无运行结果。
2,拷贝jar包到“只是”集群master的$HADOOP_HOME/share/hadoop/mapreduce/目录上,直接通过windows的eclipse"run as application"和通过hadoop插件"run on hadoop"来触发执行,它报错同上。
现象就是:报错,无进度,无运行结果。
3,拷贝jar包到集群某些slave的$HADOOP_HOME/share/hadoop/mapreduce/目录上,直接通过windows的eclipse"run as application"和通过hadoop插件"run on hadoop"来触发执行
和报错:
Error: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class bookCount.BookCount$BookCountMapper not found
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:1720)
at org.apache.hadoop.mapreduce.task.JobContextImpl.getMapperClass(JobContextImpl.java:186)
和报错:
Error: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class bookCount.BookCount$BookCountReducer not found
现象就是:有报错,但仍然有进度,有运行结果。
4,拷贝jar包到集群所有slave的$HADOOP_HOME/share/hadoop/mapreduce/目录上,直接通过windows的eclipse"run as application"和通过hadoop插件"run on hadoop"来触发执行:
现象就是:无报错,有进度,有运行结果。
第一点结论就是: windows上执行mapreduce,必须打jar包到所有slave节点才能正确分布式运行mapreduce程序。
二在Linux上的通过以下命令触发MapReduce程序的测试。
hadoop jar$HADOOP_HOME/share/hadoop/mapreduce/bookCount.jar bookCount.BookCount
1,只拷贝到master,在master上执行。
现象就是:无报错,有进度,有运行结果。
2,拷贝随便一个slave节点,在slave上执行。
现象就是:无报错,有进度,有运行结果。
但某些节点上运行会报错如下,且运行结果。:
14/06/25 16:44:02 INFO mapreduce.JobSubmitter: Cleaning up the staging area/tmp/hadoop-yarn/staging/hduser/.staging/job_1403517983686_0071
Exception in thread"main" java.lang.NoSuchFieldError: DEFAULT_MAPREDUCE_APPLICATION_CLASSPATH
at org.apache.hadoop.mapreduce.v2.util.MRApps.setMRFrameworkClasspath(MRApps.java:157)
at org.apache.hadoop.mapreduce.v2.util.MRApps.setClasspath(MRApps.java:198)
at org.apache.hadoop.mapred.YARNRunner.createApplicationSubmissionContext(YARNRunner.java:443)
at org.apache.hadoop.mapred.YARNRunner.submitJob(YARNRunner.java:283)
at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:415)
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1268)
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1265)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491)
at org.apache.hadoop.mapreduce.Job.submit(Job.java:1265)
at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1286)
at com.etrans.anaSpeed.AnaActionMr.run(AnaActionMr.java:207)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at com.etrans.anaSpeed.AnaActionMr.main(AnaActionMr.java:44)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.hadoop.util.RunJar.main(RunJar.java:212)
第二点结论就是: Linux上,只需拷贝jar文件到集群master上,执行命令hadoop jarPackage.jar MainClassName即可分布式运行mapreduce程序。
eclipse 打开java 崩溃
这句话:
# The crash happened outside the Java Virtual Machine in native code.
是在说,进程崩溃发生在 JVM之外的 native代码,因此这是第三方的 dll/ so库的问题,不是 Java的毛病。具体原因不清楚,本身这个 dump core错误只是给 JVM的开发支持人员看的,我们作为应用程序开发人员是看不懂它的日志的,除非你同时也精通 C/ C++或汇编。
看上去你使用-server方式启动 eclipse,是想让 eclipse得到更好的性能,它本身会导致 jvm申请更多的内存,可能会挤压其它应用程序的内存需求,比如当你在同一台机器又开另一个程序来 debug时。一般来说-server方式是给专职服务器用的,它们基本上不存在把进程在前台和后台之间频繁切换,也不存在多个应用程序抢内存的事情。
当内存紧张时 JVM本身的内置的 API的 dll部分也经常会报告错误,比如读取一个 jar会打开一个文件输入流都可能出现未知异常,但一般 jvm知道这件事,它不会说:崩溃发生在 jvm之外。
JVM崩溃是什么原因
Java的应用有时候会因为各种原因Crash,这时候会产生一个类似java_errorpid.log的错误日志。可以拿到了
这个日志,怎样分析Crash的原因呢?下面我们来详细讨论如何分析java_errorpid.log的错误日志。
一.如何得到这个日志文件
如果有一个严重的错误引起Java进程非正常退出,我们叫Crash,这时候会产生一个日志文件。缺省情况下,这个
文件会产生在工作目录下。但是,可以在Java启动参数通过下面的设置,来改变这个文件的位置和命名规则。例如:
java-XX:ErrorFile=/var/log/java/java_error_%p.log
就将这个错误文件放在/var/log/java下,并且以java_error_pid.log的形式出现。
二.产生错误的原因
造成严重错误的原因有多种可能性。Java虚拟机自身的Bug是原因之一,但是这种可能不是很大。在绝大多数情况下,是由于系统的库文件、API或第三方的库文件造成的;系统资源的短缺也有可能造成这种严重的错误。在发生了Crash之后,如果无法定位根本原因,也应该迅速找到Work Around的方法。
三.对日志文件的分析
首先要检查日志的文件头:例如,下面是从一个客户发过来的错误日志的文件头
java crash 是什么和JVM崩溃是什么原因的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!