kdump詳解

kdump 是 Linux 系統中的一種內核崩潰轉儲機制,用于在系統崩潰時將內存中的數據保存到磁盤上,以便后續分析系統崩潰的原因。以下是對 kdump 的詳細介紹:

1、工作原理

kdump 利用了 Linux 系統中的雙啟動機制。當系統啟動時,它會加載兩個內核:

  • 正常運行的生產內核;
  • 用于捕獲崩潰信息的 kdump 內核。

在系統運行過程中,kdump 會監控生產內核的狀態。當生產內核發生崩潰時,kdump 會接管系統,并將生產內核的內存映像保存到指定的轉儲設備中。

保存完成后,系統可以重新啟動,管理員可以通過分析內存轉儲文件來查找系統崩潰的原因。

2、組件

  • kexec:kexec 是一個用于在 Linux 系統中加載和啟動新內核的工具。kdump 使用 kexec 來加載 kdump 內核,并在生產內核崩潰時切換到 kdump 內核。
  • crashkernel:crashkernel 是預留的一塊內存區域,用于在系統崩潰時存儲內核的內存映像。kdump 會將生產內核的內存數據復制到 crashkernel 中,然后再將其保存到轉儲設備中。
  • systemd-coredump:systemd-coredump 是 systemd 中的一個組件,用于處理內核崩潰轉儲文件。它會在系統崩潰時被觸發,并將內存轉儲文件保存到指定的位置。

3、配置步驟

1)安裝 kdump 工具

在大多數 Linux 發行版中,可以使用包管理工具來安裝 kdump 工具,如在 CentOS 中可以使用yum install kexec-tools命令安裝。

# Debian/Ubuntu
sudo apt install kexec-tools kdump-tools crash
# CentOS/OpenEuler
sudo yum install kexec-tools crash kernel-debuginfo

2)配置 crashkernel 參數

需要在系統的引導配置中添加crashkernel參數,以預留內存給 kdump 使用。例如,crashkernel=128M表示預留 128MB 的內存。

修改 GRUB 配置(如?/etc/default/grub),添加?crashkernel?參數:

GRUB_CMDLINE_LINUX="crashkernel=256M quiet"

更新 GRUB 并重啟:

sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo reboot

3)?配置轉儲設備

可以指定將內存轉儲文件保存到本地磁盤、網絡存儲或其他設備中。需要在/etc/kdump.conf文件中配置轉儲設備的路徑。

如果沒有特別配置 kdump,當發生 crash 時,通常默認會將 vmcore 保存到?/var/crash?路徑下,也可以查看?/etc/kdump.conf?配置來確認:

$ grep ^path /etc/kdump.conf
path /var/crash

4)啟用 kdump 服務

安裝和配置完成后,需要啟用 kdump 服務,使其在系統啟動時自動運行。例如,在 CentOS 中可以使用systemctl enable kdump.service命令啟用服務。

驗證 kdump 狀態

  • 檢查保留內存是否生效:

    $ grep crashkernel /proc/cmdline
    BOOT_IMAGE=/boot/vmlinuz-3.10.0-327.ali2019.alios7.x86_64 root=UUID=a0172e4b-bc83-4244-994c-6f73e18ea1ee ro crashkernel=auto console=ttyS0,115200 LANG=en_US.UTF-8 fsck.repair=yes net.ifnames=0 console=tty0 console=ttyS0,115200n8
    
  • 查看服務狀態:

    systemctl status kdump

4?/etc/kdump.conf 配置詳解

參考:/etc/kdump.conf 配置詳解-CSDN博客

5、觸發與捕獲轉儲

1)手動觸發內核崩潰

echo c > /proc/sysrq-trigger

系統將重啟,并在配置目錄生成?vmcore?或?dump?文件。

2)自動捕獲場景
kdump 可自動響應以下事件:

  • 內核 panic

  • 硬件錯誤(如 NMI)

  • 用戶通過 SysRq 觸發崩潰7。

6、內存轉儲文件分析

1)分析工具

內存轉儲文件包含了系統崩潰時的內存狀態、內核堆棧信息、進程列表等重要信息。可以使用專門的工具來分析這些文件。

debuginfo調試符號工具:

參考:debuginfo詳解-CSDN博客

Crash分析工具

crash分析案例:

crash /usr/lib/debug/boot/vmlinux-$(uname -r) /var/crash/[timestamp]/vmcore

crash工具參考:linux crash工具詳解-CSDN博客

GDB 分析
適用于進程級崩潰分析:

gdb -c vmcore /path/to/vmlinux

2)分析轉儲文件

通過分析內存轉儲文件,管理員可以找出系統崩潰的原因,如內核漏洞、驅動問題、硬件故障等。這有助于快速定位和解決問題,提高系統的穩定性和可靠性。

7、優勢與局限性

優點

  • 提供詳細的故障信息:kdump 能夠在系統崩潰時捕獲到非常詳細的內存信息,包括內核數據結構、進程狀態等,這對于準確分析系統崩潰原因非常有幫助。
  • 方便調試:內存轉儲文件可以在離線狀態下進行分析,無需在故障現場進行調試,方便管理員在有條件的環境下進行深入分析。
  • 支持多種平臺:kdump 支持多種硬件平臺和 Linux 發行版,具有較好的通用性和兼容性。

局限性

  • 占用內存和磁盤空間:kdump 需要預留一定的內存作為 crashkernel,并且內存轉儲文件可能會占用大量的磁盤空間,尤其是在系統內存較大的情況下。
  • 分析難度較大:內存轉儲文件包含了大量的信息,分析這些文件需要一定的專業知識和經驗,對于普通用戶來說可能有一定的難度。
  • 不能解決所有問題:kdump 只能在系統崩潰后提供故障信息,對于一些間歇性的故障或性能問題,可能無法提供有效的幫助。

8、注意事項

內存預留大小
建議根據系統內存調整?crashkernel?參數(如 1G-4G 內存保留 192M,4G-64G 保留 256M)。

調試符號兼容性
需確保?vmlinux?文件與轉儲文件的內核版本完全一致,否則分析可能失敗。

生產環境謹慎操作
手動觸發崩潰會導致系統重啟,需在維護窗口執行。

多架構支持
x86 和 ARM 架構的保留內存配置可能不同,需參考具體硬件文檔。

9、適用場景

  • 內核崩潰分析:定位驅動或硬件兼容性問題。

  • 進程級調試:通過 core dump 分析用戶態程序崩潰。

  • 遠程故障排查:將轉儲文件傳輸至其他設備分析,減少對生產環境的影響。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/79543.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/79543.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/79543.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

RGB三原色

本文來源 : 騰訊元寶 ??RGB三原色(紅綠藍)詳解?? RGB(Red, Green, Blue)是光學的三原色,通過不同比例的混合可以產生人眼可見的絕大多數顏色。它是現代顯示技術(如屏幕、投影儀&#xff09…

CSS兼容性:挑戰與策略

CSS兼容性:挑戰與策略 引言 在前端開發的廣闊領域中,跨瀏覽器兼容性無疑是最棘手且難以預測的挑戰之一。當我們精心設計的網頁在Chrome中完美呈現,卻在Safari中布局崩潰,或在Firefox中交互失效時,這種挫折感是每位前…

[ 設計模式 ] | 單例模式

單例模式是什么?哪兩種模式? 單例模式就是一個類型的對象,只有一個,比如說搜索引擎中的索引部分,360安全衛士的桌面懸浮球。 餓漢模式和懶漢模式:餓漢模式是線程安全的,懶漢模式不是線程安全的…

Notebook.ai 開源程序是一套工具,供作家、游戲設計師和角色扮演者創建宏偉的宇宙 - 以及其中的一切

?一、軟件介紹 文末提供程序和源碼下載 Notebook.ai 開源程序是一套工具,供作家、游戲設計師和角色扮演者創建宏偉的宇宙 - 以及其中的一切。 二、軟件特點 Notebook 是作家的規劃工具,用于創建從宇宙到角色、情節到單個項目的任何內容。通過瀏覽器、…

centos7.0無法安裝php8.2/8.3

在centos安裝php8.2報錯 configure: error: *** A compiler with support for C17 language features is required. 配置過程檢測到你的系統編譯器不支持 C17 語言特性,而 PHP 8.2 的編譯需要編譯器支持 C17 sudo yum update -y sudo yum install centos-releas…

Three.js + React 實戰系列 - 客戶評價區細解教程 Clients 組件?(回答式評價 + 評分星級)

對個人主頁設計和實現感興趣的朋友可以訂閱我的專欄哦!!謝謝大家!!! 在這篇博客中,我們將實現一個簡潔的 Hear from My Clients 客戶評價區域。這個區塊在個人主頁中可以突顯用戶體驗和專業度,幫…

Vim 命令從頭學習記錄

學習鏈接:eleon-vim基礎教程 Vim - 基礎翻屏操作 光標移動:hjkl 20j 向下移動20行,w 向后移動一個字符,b 向前移動一個字符。 Ctrl u 向上翻半頁 UP Ctrl d 向下翻半頁 Down Ctrl f 向下翻整頁 Forward Ctrl b 向上翻整頁 …

Linux系統編程--基礎指令(!!詳細講解+知識拓展)

第一講 基礎指令 ? 我們現如今自己使用的電腦大部分是用的都是windows或者macOS,并配合上由微軟和蘋果開發的圖形化界面,所以使用鼠標再屏幕上進行點擊即可完成許多任務。但是作為操作系統的學習者,在linux的基礎上不再使用圖形化界進行操作…

ADK 第四篇 Runner 執行器

智能體執行器 Runner,負責完成一次用戶需求的響應,是ADK中真正讓Agent運行起來的引擎,其核心功能和Agents SDK中的Runner類似,具體作用如下: 會話管理:自動讀取/寫入 SessionService,維護歷史信…

【Tauri2】37——后端處理invoke

目錄 前言 正文 隨便看看 看看get 看看parse_invoke_request 看看message_handler 看看handle_ipc_message 看看webview的on_message方法 第一種情況的處理 第二種情況的處理 運行通信函數 返回的處理 整個流程 前言 【Tauri2】033 __TAURI_INTERNALS__和invoke-C…

kotlin 05flow -從 LiveData 遷移到 Kotlin Flow 完整教程

一 從 LiveData 遷移到 Kotlin Flow 完整教程 LiveData 長期以來是 Android 架構組件中狀態管理的核心,但隨著 Kotlin Flow 的成熟,Google 官方推薦將現有 LiveData 遷移到 Flow。本教程基于官方文章并擴展實踐細節,完成平滑遷移。 一、為什…

C++負載均衡遠程調用學習之獲取主機信息功能

目錄 01Lars-lbAgentV0.2-賦值均衡數據結構關系分析 02 Lars-lbAgent0.2-host_info-load_balance-route_lb數據結構的定義 03Lars-lbAgentV0.2-proto協議的定義 04 Lars-lbAgentV0.2-route_lb與UDP server的關聯 05 -Lars-lbAgentV0.2-route_lb與UDP server的關聯 06Lars…

2025系統架構師---論軟件的設計模式論文

2023 年,我所在的公司承擔了某部網絡靶場的研發任務。我作為公司的技 術總監,希望能打造基于網絡靶場的系列產品,參與到項目的設計中,以期開發 擴展性和可維護性良好的網絡靶場,為以后的產品開發打下基礎。網絡靶場是網 絡安全技術研究的基礎支撐平臺,它利用虛擬的和實物…

Kubernetes排錯(七)-節點排錯

1、節點 Crash 與 Vmcore 分析 kdump 介紹? 目前大多 Linux 發新版都會默認開啟 kdump 服務,以方便在內核崩潰的時候, 可以通過 kdump 服務提供的 kexec 機制快速的啟用保留在內存中的第二個內核來收集并轉儲內核崩潰的日志信息(vmcore 等文件), 這種機制需要服務…

【QT】QT中的軟鍵盤設計

QT的軟鍵盤設計 1.軟鍵盤制作步驟2.介紹有關函數的使用3.出現的編譯錯誤及解決辦法示例代碼1:按鍵事件實現軟鍵盤現象:示例代碼2:按鍵事件實現軟鍵盤(加特殊按鍵)現象: 軟鍵盤移植到新的工程的步驟&#xf…

【LaTeX+VSCode本地Win11編譯教程】

LaTeXVSCode本地編譯教程參考視頻: LaTeXVSCode本地編譯教程 下面提供一種Win11的Latex環境配置和設置方案,首先vscode安裝參考博客:【VscodeGit教程】,然后準備安裝Latex相關組件 在 https://miktex.org/download 下載 miktex 并…

2025五一杯數學建模ABC題賽題已出

2025五一杯數學建模ABC題賽題已出 A: B: C:

Springclound常用五大組件及其使用原理

注冊中心Eureka Eureka-Server:就是服務注冊中心(可以是一個集群),對外暴露自己的地址。 提供者:啟動后向Eureka注冊自己信息(地址,服務名稱等),并且定期進行服務續約 …

Docker —— 隔離的基本操作(2)

Docker —— 隔離的基本操作(2) unshareunshare 命令詳解基本語法常用選項常用示例實際應用場景注意事項與 Docker 的關系1. 執行命令2. 修改主機名3. 退出命名空間4. 驗證宿主機主機名關鍵原理類比 Docker 容器總結 實戰操作一(PID 隔離&…

Java List分頁工具

PageUtil.java import com.google.common.collect.Lists; import com.jd.platform.hotkey.dashboard.common.domain.Page; import org.springframework.util.CollectionUtils;import java.util.ArrayList; import java.util.List;public class PageUtil {/*** 通用分頁工具類*…