暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Core 文件的简单学习

济南小老虎 2023-02-14
1259

背景

最近公司内经常出现jvm进程宕机的情况.
宕机之后没有产生jvm的dump文件.比如xxx.hprof
但是产生了 core.$pid的文件.
曾经在aarch64架构上宕机时曾经想学习一下core文件的解析
但是当时因为比较懒(现在也是)
没有深入下去.
这次简单学习几个命令. 想着能够慢慢提高自己.
作为抛砖引玉


core文件需要的配置

一般需要 ulimit -c unlimited 才可以生成core文件
如果 ulimit -c 的返回值是 0 那么是禁止生成core文件的.

如果想开机生效可以在
/etc/security/limits.conf
增加设置
* hard core unlimited
* soft core unlimited
保存之后 重启也会继续生效.


关于core文件的说明

core文件不同于jvm的dump文件.
core文件是整个内存的映象快照, 是将整个内存全部写入到磁盘中去.

需要注意保证磁盘空间足够, 避免宕机导致业务停止.
默认的core文件生成路径在执行文件的当前路径.

可以通过修改 etc/sysctl.conf 进行修改默认文件名和路径
kernel.core_pattern = /var/core_%e_%t_%p

sysctl -p 生效


注意core文件的参数含义

%p - insert pid into filename 添加pid
%u - insert current uid into filename 添加当前uid
%g - insert current gid into filename 添加当前gid
%s - insert signal that caused the coredump into the filename 添加导致产生core的信号
%t - insert UNIX time that the coredump occurred into filename 添加core文件生成时的unix时间
%h - insert hostname where the coredump happened into filename 添加主机名
%e - insert coredumping executable name into filename 添加程序名
来源: https://blog.csdn.net/weixin_45937795/article/details/126364422


gdb

分析core文件一般需要 gdb 工具
可以进行安装.
默认系统好像都带上了.. 公司的垃圾网络也查不到对应内容.
所以暂时不进行安装的说明.


分析java程序生成的gdb文件

1. 查看进程信息
执行的命令为:
gdb java二进制的文件 对应的core文件
gdb opt/gscloud/server/runtime/java/x86_64-linux/bin/java core.5989
在 (gdb) 的后面输入
bt 和 bt full
可以查看堆栈信息.

2. 可以使用jmap 分析内存使用情况
环境变量内部的java原生命令 java二进制文件 对应的core文件.
jmap opt/gscloud/server/runtime/java/x86_64-linux/bin/java core.5989

3. 使用jstack分析java的线程情况
jstack opt/gscloud/server/runtime/java/x86_64-linux/bin/java core.5989

4. 转储为dump文件
jmap -dump:live,format=b,file=core.5989.hprof opt/gscloud/server/runtime/java/x86_64-linux/bin/java core.5989
会自动生成了jvm的dump文件
然后可以通过 mat 进行分析.查看宕机的问题.


学习与体会

https://www.jianshu.com/p/2cdf71f99209
https://blog.csdn.net/weixin_45937795/article/details/126364422

参考了很多文档. 如上只是其中两个.
感觉日常工作中会遇到各种各样的问题
通过问题来学习是一个很好的提高自己的机会.
希望自己能够慢慢的学习与提高.


文章转载自济南小老虎,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论