Linux 系统为何产生大量的 core 文件?

Author:rab
目录
- 一、问题分析
- 二、解决方案
- 扩展
一、问题分析
上一篇刚讲到《Docker 配置基础优化》,这里再补充一下。就在中秋+国庆这段小长假里,接收到了线上服务器磁盘告警通知,线上服务器架构是一个 Docker Swarm 集群,该集群上运行了多个服务。于是就登录服务上去看个究竟,结果发现 Docker 业务日志数据量都是正常的,因此第一个想到的就是 Docker 的存储驱动目录 /<yourpath>/overlay2 占用大小,进去看结果发现有一个文件(目录)数据大小异常(这里忘记截图了 - 大概 140 多 G),然后就根据这个目录名称找到归属的具体容器,看看是哪个容器产生的数据。以下是查看命令:
docker ps -q | xargs docker inspect --format '{{.State.Pid}}, {{.Name}}, {{.GraphDriver.Data.WorkDir}}' | grep "fe9eecfd2fc5f5c2289bd19194900c0c707d67e05e54ea55721c4d3c3ba8cc03"

确定目标容器后,就进入容器去看一下,结果在运行程序(xxx.jar)主目录(即同级目录)下发现有大量的 core 文件,且每个文件的大小均为 105M,粗略统计了一下大概占用了 143G 左右的大小。

那这些 Core 文件是什么文件?又是怎么产生的呢?
首先我们要知道 core file 是什么文件?在Linux系统中,“core file”(核心文件)是指在程序异常崩溃(如段错误、非法指令等)时生成的文件,它包含了程序在崩溃瞬间的内存状态信息,帮助开发人员进行调试和分析问题,我们一般使用调试器工具(如GDB)来分析核心文件,以便定位和解决问题。
核心文件的名称通常是 “core”,并且会与崩溃的进程相关联,因此它可能具有类似于 “core.<进程ID>” 的名称,其中 “<进程ID>” 是崩溃的进程的实际ID。核心文件通常会生成在程序崩溃的当前工作目录中,但也可以通过调整系统的核心转储设置来指定其他位置。
核心文件包含了程序的内存映像,包括堆栈、寄存器的状态以及其他与程序状态相关的信息。这些文件通常很大,因此在默认情况下,许多 Linux 系统都会禁用核心文件的生成,以节省磁盘空间。要启用核心文件生成,可以使用 ulimit 命令或 /proc/sys/kernel/core_pattern 文件进行配置。
默认情况下:Host 宿主机是限制生成 core 文件的(即禁用的),但是容器中却是无限制的(因其独立的 namespace),因此当容器中程序异常时就会生成 core 文件,而且是无限制的,这样一来就会耗尽我们 Host 宿主机的磁盘空间。

接着查看该容器的资源利用情况:


可见容器的 CPU 波动非常大(非常不稳定),因为持续时间很短,所以并没有达到监控告警的条件,但是我没可以通过 core 文件来分析导致 CPU 浮动的原因。
二、解决方案
如果需要分析这些 Core 文件,可先下载到本地其他服务器进行分析,从运维角度来说,可进入容器直接删除这些 Core 文件即可。但为了避免后续的问题,应将这些 core 文件交给开发人员进行程序异常分析,并做后续优化。
1、进入容器内部
docker exec -it <容器名> bash
2、删除 core 文件
rm -rf core.*
切记!!!不要在/<yourpath>/overlay2目录下进行任何增删操作,否则可能会导致容器内部程序异常。
其实这只是临时解决的,如果要解决根源问题,需要开发人员优化代码(解决 CPU 波动问题)或把容器中“core dump(核心转存)”关闭,关闭步骤如下:只需在 Docker 服务的启动命令添加--default-ulimit core=0:0选项即可。
vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --default-ulimit core=0:0
systemctl daemon-reload
systemctl restart docker.service
运行一个测试容器再次验证,此时的容器已经限制了 core file 了。
docker run -it --rm centos:centos7.9.2009

如果此时你想要启用 core dump,去掉 --default-ulimit core=0:0 选项即可。
扩展
1、overlay2 目录下的那些长目录说明
overlay2 目录下的那些长目录实际上对应 Docker 中运行的容器或镜像的文件系统层。每个子目录都包含容器或镜像的文件系统内容。这些子目录的名称是由一种称为 SHA256 散列的哈希函数生成的,用于唯一标识每个文件系统层。

每个子目录中包含容器或镜像的文件系统内容,以及元数据和其他相关信息。这些文件系统层会根据需要叠加在一起,以创建容器的整体文件系统视图。
2、如何配置 Linux 系统的 core file
-
启用
# 法1:ulimit命令 - 临时生效(重启失效) ulimit -c unlimited # 无限制大小 ulimit -c 100000 # 限制大小为100MB# 法2:/etc/security/limits.conf文件 - 永久生效 cat /etc/security/limits.conf * hard core unlimited * soft core unlimited如何自定义 core 文件名及存储目录?
# 法1:/proc文件 # 自定义core文件名及存储位置 echo "/tmp/core-%e.%p" > /proc/sys/kernel/core_pattern # 或 sysctl -w kernel.core_pattern="/tmp/core-%e.%p" # 这两条任意命令会将核心文件保存在/tmp目录中,文件名格式为core-<进程名称>.<进程ID># 法2:/etc/sysctl.conf文件 cat /etc/sysctl.conf kernel.core_pattern = /tmp/core-%e.%p kernel.core_uses_pid = 1 -
禁用
# 法1:ulimit命令 - 临时禁用 ulimit -c 0# 法2:/etc/security/limits.conf文件 - 永久禁用 cat /etc/security/limits.conf * hard core 0 * soft core 0
—END
相关文章:
Linux 系统为何产生大量的 core 文件?
Author:rab 目录 一、问题分析二、解决方案扩展 一、问题分析 上一篇刚讲到《Docker 配置基础优化》,这里再补充一下。就在中秋国庆这段小长假里,接收到了线上服务器磁盘告警通知,线上服务器架构是一个 Docker Swarm 集群&#x…...
Web_python_template_injection SSTI printer方法
这题挺简单的 就是记录一下不同方法的rce python_template_injection ssti了 {{.__class__.__mro__[2].__subclasses__()}} 然后用脚本跑可以知道是 71 {{.__class__.__mro__[2].__subclasses__()[71]}} 然后直接 init {{.__class__.__mro__[2].__subclasses__()[71].__i…...
TCP/IP网络江湖——江湖导航(网络层上篇)
目录 一、引言 二、IP地址与路由 三、IP协议与数据包转发 3.1 IP协议:网络江湖的规矩...
数据结构——AVL树(详解 + C++模拟实现)
文章目录 前言AVL树的概念AVL树节点的定义AVL树类框架AVL树的插入AVL树的旋转新节点插入较高子树的左侧 —— 左左: 右单旋新节点插入较高右子树的右侧——右右: 左单旋新节点插入较高左子树的右侧 —— 左右: 先左单旋然后再有单旋新节点插入较高右子树的左侧&…...
redis 雪崩,穿透,击穿及解决方案
一、缓存雪崩: 1. 原因: 缓存雪崩是指在我们设置缓存时大量采用了相同的过期时间,导致缓存在某一时刻同时失效,请求全部转发到DB,DB瞬时压力过重雪崩。 2. 解决方案: 将失效时间分散,通过生成随机数使得key的过期时间…...
Flutter环境搭建及新建项目
一、下载安装压缩包 https://storage.flutter-io.cn/flutter_infra_release/releases/stable/windows/flutter_windows_3.10.6-stable.zip 二、解压缩 解压之后,将里面的flutter整体拿出来 三、配置环境变量 将flutter/bin全路径配置到系统环境变量里面 四、运行…...
【面试题精讲】深拷贝和浅拷贝区别了解吗?什么是引用拷贝?
“ 有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top ” 首发博客地址[1] 面试题手册[2] 系列文章地址[3] 深拷贝和浅拷贝的区别: 深拷贝(Deep Copy)和浅拷贝&#…...
CentOS7.9中使用packstack安装train版本
这里写目录标题 材料准备为什么选择packstack安装静态ip系统配置使用阿里云yum源安装packstack部署openstack 材料准备 ecs云服务器8核心16g内存一台,系统盘100GB,系统CentOS7.9vpc网段:192.168.0.1/24eip一个,带宽5M以上 为什么…...
mfw git泄露构造闭合
这题也挺有想法 第一次确实没有想到 首先我们可以扫出 git 然后 我们githack 泄露一下 然后我们看index.php代码 <?phpif (isset($_GET[page])) {$page $_GET[page]; } else {$page "home"; }$file "templates/" . $page . ".php";/…...
UE5修改导航网格的参数
Unreal Engine 4 - Recast NavMesh Size, how to Change Agent Radius / Tutorial - YouTubehttps://www.youtube.com/watch?vf3hF6xdmCTk 修改当前的 代理半径就是一般贴边的长度 修改编辑器的...
郁金香2021年游戏辅助技术中级班(七)
郁金香2021年游戏辅助技术中级班(七) 058-C,C写代码HOOK分析封包数据格式A059-C,C写代码HOOK分析封包数据格式B-detours劫持060-C,C写代码HOOK分析封包数据格式C-过滤和格式化061-C,C写代码HOOK分析封包数据格式D-写入配置文件062-C,C写代码HOOK分析封包…...
【网络】路由器和交换机的区别
🍁 博主 "开着拖拉机回家"带您 Go to New World.✨🍁 🦄 个人主页——🎐开着拖拉机回家_Linux,大数据运维-CSDN博客 🎐✨🍁 🪁🍁 希望本文能够给您带来一定的帮助…...
SQL的CASE WHEN函数、CAST函数、CONVERT() 函数、COALESCE()函数、DATEDIFF()函数
一、CASE WHEN简单使用 SELECT CASE WHEN age > 18 AND age < 25 THEN 18-25WHEN age > 25 AND age < 35 THEN 25-35WHEN age > 35 AND age < 45 THEN 36-45ELSE 45END AS age_groupFROM peopleGROUP BY age_group;二、CASE WHEN语句与聚合函数一起使用 SE…...
前后端分离计算机毕设项目之基于springboot+vue的房屋租赁系统《内含源码+文档+部署教程》
博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ 🍅由于篇幅限制,想要获取完整文章或者源码,或者代做&am…...
《Spring框架前世今生》
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...
基于树种优化的BP神经网络(分类应用) - 附代码
基于树种优化的BP神经网络(分类应用) - 附代码 文章目录 基于树种优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.树种优化BP神经网络3.1 BP神经网络参数设置3.2 树种算法应用 4.测试结果:5.M…...
纳百川冲刺创业板上市:计划募资约8亿元,宁德时代为主要合作方
近日,纳百川新能源股份有限公司(下称“纳百川”)向深交所创业板递交的上市申请材料获得受理,浙商证券为其独家保荐人。 本次冲刺上市,纳百川计划募资8.29亿元,将用于纳百川(滁州)新能…...
light client轻节点简介
1. 引言 前序博客: Helios——a16z crypto构建的去中心化以太坊轻节点 去中心化和自我主权对于Web3的未来至关重要,但是这些理想并不总适用于每个项目或应用程序。在非托管钱包和bridges等工具中严格优先考虑安全性而不是便利性的用户,可选…...
1500*B. Zero Array(贪心数学找规律)
Problem - 1201B - Codeforces 解析: 因为每次减少2,如果总和为奇数肯定无法实现。 特例,如果某个数大于其他所有数的总和,同样无法实现。 其他均可实现。 #include<bits/stdc.h> using namespace std; #define int long l…...
java Spring Boot整合jwt实现token生成并验证效果
先在 pom.xml 文件中注入依赖 <!-- JWT --> <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-api</artifactId><version>0.11.2</version> </dependency> <dependency><groupId>io.jsonw…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
