1. kdump簡介
coredump為用戶態進程段錯誤等觸發的crash現場轉儲機制, 可利用gdb進行corefile的調試.
kdump為kernel crash/panic等而觸發的轉儲機制, 一般使用crash工具進行調試.
2. kdump原理
預留部分內存(如192MB) 供轉儲內核使用, 當panic/crash產生時 利用kexec系統調用直接拉起轉儲內核. 利用該內核進行crash現場的儲存dump.
3. kdump使用
ubuntu配置的內核已使能kdump的支持, 故僅需要安裝linux-crashdump包即可,
sudo apt-get install linux-crashdump
該包包含crash, kdump-tools, grub等相關依賴.
安裝過程中會修改kernel cmdline已預留kdump轉儲內核內存空間. 以及使能kdump.
reboot重啟系統后,
可用以下方式驗證:
kdump-config show
4、安裝kdump
apt-get install linux-crashdump
根據提示操作
5. 調整crashkernel內存大小為768M(默認192M內存太小)
修改 /etc/defatul/grub.d/kdump-tools.cfg 中 crashkernel=512M-:768M
6. 重新生成grub.cfg
grub-mkconfig -o /boot/grub/grub.cfg
7. reboot 重啟生效
手動測試kdump能否正常工作:
echo 1 > /proc/sys/kernel/sysrq
echo c > /proc/sysrq-trigger
此時系統會觸發kdump,並重啟
重啟后,/var/crash會保存此次手動觸發生成的vmcore
檢查生產的文件:
kdump的高級配置
Centos系統和kdump相關的配置文件有兩個:一個是/etc/sysconfig/kdump,該文件內的內容一般無需修改 -- 網上一些技術站上在kdump服務啟動不成功時修改這里,這里提示下,如果是通過yum源正常安裝的,該文件無需修改;一個是/etc/kdump.conf 。這里指的高級配置主機是/etc/kdump.conf ,該配置文件的可配置選項可通過man 5 kdump.conf 獲取幫助,這里只列舉下常用到的部分:
ubuntu 這里主要配置/etc/default/kdump-tools 和/etc/defatul/grub.d/kdump-tools.cfg。
下面先介紹Centos的配置
1、設置kdump文件成生的位置
控制路徑的主要有兩部分:
- #raw /dev/sda5
- #ext4 /dev/sda3
- #ext4 LABEL=/boot
- #ext4 UUID=03138356-5e61-4ab3-b58e-27507ac41937
- #nfs my.server.com:/export/tmp
- #ssh user@my.server.com
- path /var/crash
前面的部分用於設置存儲的設備或分區位置--可以是raw裸設備、本地分區、網絡路徑在本地的掛載點或通過ssh傳輸,path則是相對的存儲路徑。如我們通過nfs 將遠程的一個分區掛載到本地的/mnt分區下,kdump文件就存儲在/mnt/var/crash/下。默認上面的部分不設置就是相對根分區的相對路徑,即/var/crash 。
需要特別指出的是,如果使用ssh進行傳輸,需要配置key認證,使用/etc/init.d/kdump propagate即可配置ssh認證傳輸,如下:
- kdump.conf中指定ssh網絡傳輸
- ssh root@192.168.0.100/data/
- 執行下面的命令會配置本機到192.168.0.100主機的key認證傳輸
- # service kdump propagate
- Generating new ssh keys… done.
- The authenticity of host '192.168.0.100 (192.168.0.100)' can't be established.
- RSA key fingerprint is 31:c2:d8:b6:eb:2e:03:64:cd:ba:56:e9:49:6e:5d:6c.
- Are you sure you want to continue connecting (yes/no)? yes
- Warning: Permanently added '192.168.0.100' (RSA) to the list of known hosts.
- root@192.168.0.100's password:
- /root/.ssh/kdump_id_rsa.pub has been added to ~root/.ssh/authorized_keys2 on
- 192.168.0.100
按照上面的配置,當有kdump生成時,會通過scp傳輸存儲在192.168.0.100主機的/data/var/crash 目錄下。
2、core_collector控制 (dump保存內存的數據太大,這里配置下可以減少很多數據)
該處是信息收集大小的關鍵,主要用到makedumpfile命令,centos 上的默認配置如下:
- core_collector makedumpfile -c --message-level 1 -d 31
-c 表示啟動zlib進行數據壓縮
--message-level 指定了信息收集的級別,1為只打印process indicator 日志信息,默認值為7,具體見下表
- Message | progress common error debug report
- Level | indicator message message message message
- ---------+------------------------------------------------------
- 0 |
- 1 | X
- 2 | X
- 4 | X
- * 7 | X X X
- 8 | X
- 16 | X
- 31 | X X X X X
-d 指定了kdump的過濾級別,具體見下表
- | cache cache
- Dump | zero without with user free
- Level | page private private data page
- -------+---------------------------------------
- 0 |
- 1 | X
- 2 | X
- 4 | X X
- 8 | X
- 16 | X
- 31 | X X X X X
31表示過濾掉以上五種全部信息,這樣kdump生成的速度就會更快,生成的vmcore文件也會較小。如果此處使用值0 ,表示不過濾任何信息,在kdump生成時,會記錄主機當前的所有信息。這就是為什么在kdump生成時,有些主機只有幾十M大小生成,有些主機確有幾十 G大小的原因。更多用法可以查看makedumpfile命令的幫助文檔。
3、指定default配置
該處的配置,參考了網上的一些配置,一些技術文檔上使用的是defult reboot選項,而默認的是defult shell ,兩者之間的區別是:
- reboot: If the default action is reboot simply reboot the system and loose the core that you are trying to retrieve.
- shell: If the default action is shell, then drop to an hush session inside the initramfs from where you can try to record the core manually.Exiting this shell reboots the system.
在查看/usr/share/doc/kexec-tools-2.0.0/kexec-kdump-howto.txt幫助手冊中的解釋更容易理解一些,如下:
- reboot --> reboot the system.
- shell --> drop to a shell with-in initrd. A user can try to capture the
- vmcore manually.
從這個解釋可以看到選擇shell 可以手工的DIY一些東西,而選擇reboot 會在kdump生成后簡單直接的reboot 系統。除了上在兩個選項,還會poweroff 、halt 可選,如果不是技術研究的目錄,在生產環境上我想誰不會選擇kdump生成后讓系統掛起吧。
除上面三處之外,還有其他配置部分,如debug_mem 的配置等。具體可以看kdump.conf 的man 結果。
下面介紹ubuntu16.04的配置
ubuntu 16.04 沒有kdump.conf ,主要配置/etc/default/kdump-tools文件
#MAKEDUMP_ARGS="-c -d 31" 默認是注釋的,可以修改
改成 MAKEDUMP_ARGS="-c -d 31 --dump-dmesg" 這樣觸發kdump的時候保存的日志會小很多,以免時間久了日志占滿系統盤。
ubuntu apt-get 比較快的國內源
方法:
1、修改源地址:
cp /etc/apt/sources.list /etc/apt/sources.list.bak
vim /etc/apt/sources.list
#添加阿里源
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
##清華源
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
更新看看速度:
sudo apt-get update
sudo apt-get upgrade
鏈接:https://www.jianshu.com/p/c3f001d6b765
參考;
https://www.cnblogs.com/zhangmingda/p/12566534.html
無法聯網的情況下手動下載:
總共需要下面幾個包:
下載完成之后執行
dpkg -i *.deb 可安裝
所有包都可以在下面的網站下載安裝:
https://packages.ubuntu.com/xenial/linux-crashdump