Core 文件的简单学习

core,文件,简单,学习 · 浏览次数 : 285

小编点评

## 了解jvm进程宕机分析方法 **1. 首先要了解jvm进程的运行机制,以及jvm与core文件之间的关系。** * jvm 是一个运行在操作系统内核中的虚拟机。 * core 文件是jvm进程中保存的内存快照。 * 进程创建后,jvm会动态生成一个core文件来存储内存内容。 * core 文件是系统不可改变的,且 jmp 工具用于分析core文件。 **2. 可以使用gdb工具分析core文件。** * 使用gdb 启动jvm进程,然后在终端中运行bt和bt full等命令查看堆栈信息。 * 使用jmap工具分析内存使用情况,查看java进程中各个类的内存占用情况。 * 使用jstack工具分析线程情况,查看各个线程的状态和执行顺序。 **3. 结合以上信息,可以推断出jvm进程宕机的原因,例如:** * 内存泄漏:jvm可能因为内存泄漏导致内存占用过大,导致宕机。 * 内存分配错误:jvm可能在分配内存时出现错误,导致宕机。 * 线程竞争:多个线程争夺相同的资源,导致性能下降,最终导致宕机。 **4. 通过问题来学习:** * 可以参考相关文档和博客文章,学习如何使用gdb和jmap分析core文件。 * 可以使用问题来思考jvm进程中的关键线程和内存分配过程,从而推断出潜在问题。 * 可以使用jstack分析线程状态,观察线程之间的竞争和同步关系。 **5. 建议:** * 使用jmap工具分析内存使用情况,了解java进程中各个类的内存占用情况。 * 使用jstack分析线程状态,观察各个线程的状态和执行顺序。 * 结合gdb和jmap的信息,可以快速定位jvm进程宕机的关键问题。

正文

背景

最近公司内经常出现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

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

与Core 文件的简单学习相似的内容:

Core 文件的简单学习

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

DotNetGuide新增C#/.NET/.NET Core充电站(让你学习不迷路)

DotNetGuide简介 记录、收集和总结C#/.NET/.NET Core基础知识、学习路线、开发实战、学习视频、文章、书籍、项目框架、社区组织、开发必备工具、常见面试题、面试须知、简历模板、以及自己在学习和工作中的一些微薄见解。希望能和大家一起学习,共同进步👊【让现在的自己不再迷茫✨,如果本

DotNetGuide专栏C#/.NET/.NET Core充电站(让你学习不迷路)

DotNetGuide简介 记录、收集和总结C#/.NET/.NET Core基础知识、学习路线、开发实战、编程技巧练习、学习视频、文章、书籍、项目框架、社区组织、开发必备工具、常见面试题、面试须知、简历模板、以及自己在学习和工作中的一些微薄见解。希望能和大家一起学习,共同进步。如果本知识库能为您提

NetMvc通过亚马逊方式服务器端和客户端上传MinIO顺利解决

前言: 1、由于项目是.NET Framework 4.7 MVC LayUI,所以需要找一个资源站点存放项目中静态资源文件; 2、需要支持服务端和客户端都支持上传文件方式; 3、调用简单,涉及库越少越好。 结果: 调用 AWSSDK.S3 和 AWSSDK.Core 实现文件上传到 MinIO ;

使用中台 Admin.Core 实现了一个Razor模板的通用代码生成器

前言 前面使用 Admin.Core 的代码生成器生成了通用代码生成器的基础模块 分组,模板,项目,项目模型,项目字段的基础功能,本篇继续完善,实现最核心的模板生成功能,并提供生成预览及代码文件压缩下载 准备 首先清楚几个模块的关系,如何使用,简单画一个流程图 前面完成了基础的模板组,模板管理,项目

[转帖]reposync

0. 简介 reposync 命令简单来说就是可以把指定外网源(repo id)的包同步到本地文件中 1. 安装 reposync 命令 [root@V10SP1-1 ~]# yum install -y dnf-plugins-core 2. 常用选项以及参数 选项含义 -c [file] 指定配

为控制器生成OpenAPI注释

非常喜欢. NET 的 `///` 注释,写代码的时候就顺道完成写文档的过程,简直不要太爽了。 ASP. NET CORE 也是一样的,通过 `Swagger` 工具,可以自动生成 API 的接口文档(OpenAPI[规范](https://openapi.apifox.cn/)),提供给前端使用,

中台框架模块开发实践-代码生成器的添加及使用

前言 之前已经分享过几篇关于中台项目框架的文章,相关介绍就不再赘述 所谓工欲善其事必先利其器,一个项目拥有一个代码生成器是很有必要的,能够大大的节省时间,减少手误,提供开发效率(ps:特别小团队搞微服务但是没有代码生成器,简直要了老命) 本文将分享如何在中台框架项目 Admin.Core 中添加代码

接入HMS Core应用内支付服务过程中一些常见问题总结

华为HMS Core应用内支付服务(In-App Purchases,IAP)为应用提供便捷的应用内支付体验和简便的接入流程。该服务支持客户端和服务端两种开发形式,具体可以参考官方文档。 往期文章:常见问题总结(2)中分享总结了有关无法拉起支付页面的常见问题,本文将对近期开发者们较为关注的一些集成应

全面的ASP.NET Core Blazor简介和快速入门

前言 因为咱们的MongoDB入门到实战教程Web端准备使用Blazor来作为前端展示UI,本篇文章主要是介绍Blazor是一个怎样的Web UI框架,其优势和特点在哪?并带你快速入门上手ASP.NET Core Blazor(当然这个前提是你要有一定的C#编程基础的情况,假如你完全没有接触过C#的