讲师中心 微信公众号
AI工具推荐 视频效率加速

linux怎么配置内核核心转储_linux设置coredump限制【指南】

星婷姑娘_3802

星婷姑娘_3802

发布时间:2026-03-17 20:51:11

|

585人浏览过

|

来源于php中文网

原创

coredump写不到指定目录主因是core_pattern配置及目录权限问题:需检查/proc/sys/kernel/core_pattern,确保路径父目录存在且权限为1777,若用管道则需确认接收服务运行正常。

linux怎么配置内核核心转储_linux设置coredump限制【指南】

coredump 文件写不到指定目录?先检查 /proc/sys/kernel/core_pattern

Linux 内核把 core 文件往哪写,完全由 core_pattern 控制,不是靠 ulimit -c 或目录权限就能决定的。默认值通常是 core,意味着只在进程当前工作目录生成,且容易被权限或磁盘空间拦住。

  • 用 cat /proc/sys/kernel/core_pattern 看当前设置;想持久化修改,得写进 /etc/sysctl.conf(如 kernel.core_pattern=/var/crash/core.%e.%p.%t)
  • 如果路径含目录(比如 /var/crash/),内核**不会自动创建父目录**,必须提前 mkdir -p /var/crash && chmod 1777 /var/crash(注意:1777 是必须的,否则内核拒绝写入)
  • 若 core_pattern 以 | 开头(如 |/usr/lib/systemd/systemd-coredump %P %u %g %s %t %e %p),说明走用户态处理器,此时要确保对应服务(如 systemd-coredump)已启用且可执行

ulimit -c 设置了 0 却还是没 core?确认 shell 会话和子进程继承关系

ulimit -c 是 per-process 的软限制,只对当前 shell 及其直接 fork 的子进程生效。它不跨登录会话、不进 systemd 服务、不进 cron,更不会影响已运行的守护进程。

  • 在目标环境中(比如 ssh 进去的终端)运行 ulimit -c,确认输出不是 0;设为无限制用 ulimit -c unlimited
  • 如果是 systemd 服务,必须在 unit 文件里加 LimitCORE=infinity,光改 shell 的 ulimit 没用
  • 某些发行版(如 RHEL/CentOS 8+)默认启用 fs.suid_dumpable = 0,导致 setuid 程序(如 sudo、passwd)即使 ulimit 允许也禁止生成 core —— 需手动设为 1 或 2

core 文件生成了但内容为空或截断?检查 /proc/sys/kernel/core_pipe_limit 和内存布局

当 core_pattern 指向管道(|)时,内核会把 core 数据喂给管道另一端进程。如果接收方卡住、退出太快或缓冲区溢出,就会丢数据甚至让整个 dump 失败。

  • 查看当前管道缓冲上限:cat /proc/sys/kernel/core_pipe_limit,默认是 0(不限),但如果设成了小值(如 1),多进程并发 crash 时后到的会被丢弃
  • 某些程序(尤其是启用了 memlock 限制或使用大页内存的)可能因 VMA 标记(如 VM_DONTDUMP)跳过部分内存段,导致 core 看似“不全”——这不是配置问题,是程序自己要求的
  • 用 readelf -l core | grep LOAD 看实际加载的 segment 数量,再对比原 binary 的 readelf -l /path/to/binary,能快速判断是否缺段

systemd-coredump 不记录 Rust/Go 程序?注意信号处理和栈展开兼容性

systemd-coredump 依赖 libdw(来自 elfutils)做符号解析和栈回溯,而 Rust/Go 默认不生成标准 DWARF 调试信息,或使用自定义栈结构,导致 coredump 工具无法正确解析调用栈。

  • Rust 编译时加 debug = true 到 Cargo.toml 的 [profile.dev] 或用 cargo build --debug,确保生成 .debug_* section
  • Go 程序需禁用内联和优化:go build -gcflags="all=-N -l",否则 runtime.stack() 和 coredump 解析都会失效
  • 即便有调试信息,Go 的 goroutine 栈、Rust 的 async state 也不会出现在传统 backtrace 中——这不是 bug,是语言运行时模型决定的

真正麻烦的从来不是改几个 sysctl,而是搞清哪一层在拦截:是内核拒绝写目录,是 systemd 覆盖了 ulimit,还是语言运行时主动绕过了信号处理。每一步都得用 strace -e trace=rt_sigprocmask,prctl,openat 配合 cat /proc/PID/status | grep -i core 实锤,别猜。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

相关专题

更多
C++系统编程内存管理_C++系统编程怎么与Rust竞争内存安全
C++系统编程内存管理_C++系统编程怎么与Rust竞争内存安全

C++系统编程中的内存管理是指 对程序运行时内存的申请、使用和释放进行精细控制的机制,涵盖了栈、堆、静态区等不同区域,开发者需要通过new/delete、智能指针或内存池等方式管理动态内存,以避免内存泄漏、野指针等问题,确保程序高效稳定运行。它核心在于开发者对低层内存有完全控制权,带来灵活性,但也伴随高责任,是C++性能优化的关键。

86

2025.12.22

Rust异步编程与Tokio运行时实战
Rust异步编程与Tokio运行时实战

本专题聚焦 Rust 语言的异步编程模型,深入讲解 async/await 机制与 Tokio 运行时的核心原理。内容包括异步任务调度、Future 执行模型、并发安全、网络 IO 编程以及高并发场景下的性能优化。通过实战示例,帮助开发者使用 Rust 构建高性能、低延迟的后端服务与网络应用。

258

2026.02.11

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

602

2026.03.05

Rust 系统编程入门与实战
Rust 系统编程入门与实战

统讲解近年最受关注的系统级编程语言 Rust 的核心知识体系,涵盖 Rust 的安装与 Cargo 项目管理、变量绑定与不可变性设计哲学、所有权(Ownership)/ 借用(Borrowing)/ 生命周期(Lifetime)三大核心概念、结构体/枚举与模式匹配(match)、Trait 特征系统与泛型编程、错误处理(Result/Option)、智能指针(Box/Rc/Arc)、并发编程的无畏并发(Fearless Concurre

477

2026.05.29

Rust异步网络服务与Tokio Runtime深度实践
Rust异步网络服务与Tokio Runtime深度实践

本专题围绕 Rust 在高并发网络服务中的应用展开,系统讲解 Tokio 异步运行时、任务调度模型、Future 执行机制以及高性能网络编程方式。结合实际服务端案例,帮助开发者构建低延迟、高可靠的异步服务架构。

256

2026.06.29

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

5207

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2288

2023.08.10

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

3870

2023.06.21

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

100

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn