首页编程java编程java crash 是什么,JVM崩溃是什么原因

java crash 是什么,JVM崩溃是什么原因

编程之家2023-10-11111次浏览

各位老铁们好,相信很多人对java crash 是什么都不是特别的了解,因此呢,今天就来为大家分享下关于java crash 是什么以及JVM崩溃是什么原因的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

java crash 是什么,JVM崩溃是什么原因

android中的native crash指的是什么大概有几种情况

android framework分为java和native两层

native运行于C的runtime,高效。一般java层只是封装,通过jni访问native底层HAL,driver的crash也会导致上层的crash‍

,有效利用Log信息并对其进行分析与实时的监控管理,对于分析Android手机发生Crash的原因具有极为重要的作用。

java crash 是什么,JVM崩溃是什么原因

Android Log文件类型

由于Android上的应用程序千差万别,出现的问题也不尽相同。不过Bug类型还是有规律可循的,可以根据生成的Log文件找到相应的错误,通常错误信息里记录了错误的大致位置,据此可以捕获到问题的关键信息。

Log文件记录着每次操作的信息,在出现问题后可以借助log信息分析以达到解决问题的目的,Log文件类型主要分为以下几种:

java crash 是什么,JVM崩溃是什么原因

(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崩溃是什么原因的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!

java干什么用的,java是干什么的java钩子是什么(java的框架spring中的这些接口起什么作用请通俗解释)