Java core dump
生成Java core dump
可以按照下面这个文章的指引来通过jni调用触发Java core dump
基本思路是通过Java调用本地C代码,然后在C代码中触发一个错误,从而引发jvm
crash。
需要注意两个问题
- gcc编译的时候需要注意库的名称,例子里面是
libnativelib.so,需要改为libnativelib.jnilib
$ gcc -fPIC -o libnativelib.jnilib -shared \
-I$JAVA_HOME/include/linux/ \
-I$JAVA_HOME/include/ \
CoreDumper.c
- 例子中的命令是基于linux的,如果在mac下jni_md.h头文件的位置和linux稍有不同,在用gcc编译的时候要注意下,需要把jni_md.h文件复制到对应的目录
sudo cp $JAVA_HOME/Contents/Home/include/darwin/jni_md.h $JAVA_HOME/Contents/Home/include
- java.lang.UnsatisfiedLinkError: no XXX in java.library.path
在执行java mainClass的时候可能会报这个错误,因为java执行mainClass的时候mainClass需要带有package名称,要看下生成的libnativelib.jnilib在那一个目录,使用-Djava.library.path指向libnativelib.jnilib的路径
经过上面一顿操作之后,就可以看到执行java目录下面有一个hs_err_pidxxx.log文件,在对应的目录下还有core dump文件,mac下的core dump目录是
/cores
不过有可能并没有生成core dump,只有hs_err_pidxxx.log文件,我们看下hs_err_pidxxx.log文件,其中有一行
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
根据提示core dump失败了,可以通过设置ulimit -c unlimited再重新试下,就可以在/cores目录下找到类似core.xxx的文件。
因为mac下会限制进程对资源的限制,-c表示core文件的最大值,单位为区块,ulimit -c unlimited设置为无限制。注意在当前shell中执行只会对当前shell生效。
core dump分析
hs_err_pidxxx.log是一个文本日志文件,可以直接查看。core dump文件可以通过gdb、jmap、jstack来分析,具体可以参考Analysing a Java Core Dump
参考
JVM Crashes的常见原因:Staying on Top of JVM Crashes
gcc编译找不到jni_md.h:Mac下Java JNI 调C
java.lang.UnsatisfiedLinkError: no XXX in java.library.path
Java core dump的更多相关文章
- 记一次Java Core Dump分析过程
#背景提要 很久没有亲自动手部署代码了,命令行的亲切感越来越低.放飞了键盘,习惯了鼠标操作的windows环境.冷不丁实操部署也是不错的. 常常在部署时,运维同学对于[hs_err_pid]文件视而不 ...
- 认识Java Core和Heap Dump
什么是Java Core和Heap Dump Java程序运行时,有时会产生Java Core及Heap Dump文件,它一般发生于Java程序遇到致命问题的情况下. 发生致命问题后,Java进程有时 ...
- JVM 崩溃 Failed to write core dump解决办法 WINDOWS
JVM 崩溃 Failed to write core dump解决办法 WINDOWS MIT key words: JVM,崩溃,windows,Failed,core dump,虚拟内存 最近从 ...
- Java Core和HeapDump
什么是Java Core和Heap Dump Java程序运行时,有时会产生Java Core及Heap Dump文件,它一般发生于Java程序遇到致命问题的情况下. 发生致命问题后,Java进程有时 ...
- Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
使用JProfiler监控JAVA程序内存,JVM报错: A fatal error has been detected by the Java Runtime Environment: EXCEPT ...
- 三个实例演示 Java Thread Dump 日志分析
原文地址: http://www.cnblogs.com/zhengyun_ustc/archive/2013/01/06/dumpanalysis.html jstack Dump 日志文件中的线程 ...
- 三个实例演示 Java Thread Dump 日志分析(转)
原文链接:http://www.cnblogs.com/zhengyun_ustc/archive/2013/01/06/dumpanalysis.html 转来当笔记^_^ jstack Dump ...
- Java Thread dump 日志分析
jstack Dump 日志文件中的线程状态 dump 文件里,值得关注的线程状态有: 死锁,Deadlock(重点关注) 执行中,Runnable 等待资源,Waiting on conditio ...
- 使用GDB 追踪依赖poco的so程序,core dump文件分析.
前言 在windows 下 系统核心态程序蓝屏,会产生dump文件. 用户级程序在设置后,程序崩溃也会产生dump文件.以方便开发者用windbg进行分析. so,linux 系统也有一套这样的东东- ...
随机推荐
- 如何使 JavaScript 更高效?
传统的 Web 页面不会包含很多脚本,至少不会太影响 Web 页面的性能.然而,Web 页面变得越来越像应用程序,脚本对其的影响也越来越大.随着越来越多的应用采用 Web 技术开发,脚本性能的提升就变 ...
- Python 遍历文件夹清理磁盘案例
import os suffix_name_list = [".pdb", ".ilk"] def find_file(path): # 遍历文件夹 for i ...
- xposed获取类的属性成员
XposedBridge.log("开始获取属性:"); Field[] fields = param.thisObject.getClass().getDeclaredField ...
- MyBatis-Spring 学习笔记一 SqlSessionFactoryBean以及映射器类
MyBatis-Spring 是一个用来整合 MyBatis 和 Spring 框架的小类库,通过这个jar包可以将 MyBatis 代码地整合到 Spring 中. 使用这个类库中的类, Sprin ...
- Mysql的管理
Linux系统中:mysql进入的命令为mysql -u root -p +你的mysql密码. Mysql是如何添加用户呢? 在mysql命令行下,使用use mysql;进入mysql的数据库中. ...
- linux下无法删除文件的解决办法
1.使用 lsattr 命令查看文件的附加属性.查看文件是否被赋予了 a , i 属性,如果含有这两个属性,文件是不能被删除的. a:让文件或目录仅供附加用途: b:不更新文件或目录的最后存取时间: ...
- go语言的defer语句
转: https://www.jianshu.com/p/5b0b36f398a2 ---------------------------------------------------------- ...
- JavaScript004,输出
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- IP协议首部结构介绍
当提交给数据链路层进行传送时,一个 I P分片或一个很小的无需分片的 I P数据报称为分组.数据链路层在分组前面加上它自己的首部,并发送得到的帧.I P只考虑它自己加上的 I P首部,对报文本身既不检 ...
- FastDFS+Nginx+Module
1.安装libevent wget https://cloud.github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.g ...