首頁 > 軟體

RHEL7系統管理之核心管理

2020-06-16 16:47:21

1. Kdump工具

  Kdump的工作機制是在核心崩潰時, 通過kexec 工具由BIOS啟動一個備用核心, 由備用核心執行一系列任務,儲存記憶體中崩潰核心的狀態, 供後續故障分析用。

  本文預設AMD或INTEL X86_64架構, RHEL7系統環境.

1.1 核心管理工具Kdump安裝

  Kdump是RHEL7中自帶的核心管理工具.在RHEL7.1之前的版本,kdump作為安裝完成之後的可選元件自動安裝,從RHEL7.1開始kdump被植入安裝介面,作為系統基礎工具供安裝選擇.

可以通過下面命令直接RPM包安裝.

yum -y install kexec-tools
rpm -q kexec-tools

同時,Kdump還配備了圖形化管理工具,可以通過下面命令安裝.

yum -y install system-config-kdump

  對於RHEL7.4及之後的版本,kdump支援INTEL IOMMU. 而不支援RHEL7.3及之前的版本.

1.2 通過命令列設定kdump記憶體容量

  kdump能監控系統核心執行狀態,其地位比較特殊. kdump的記憶體空間是在系統啟動時,由載入程式分配的,相對於系統核心,kdump記憶體是一個獨立的空間.

可以通過如下命令指定kdump的記憶體空間大小.

crashkernel=128M    #為kdump保留128M的記憶體空間.

   crashkernel的值可以設定成“auto",在一些擁有較大記憶體的系統中,利於實現Kdump的自動化管理.

crashkernel=auto

  當然,crashkernel的值還可以通過如下形式實現更靈活的設定.

  crashkernel=<範圍1>:<大小1>, <範圍2>:<大小2>

crashkernel=512M-2G:64M,2G-:128M    #當系統記憶體在512M-2G之間時,為Kdump保留64M的記憶體空間;當系統記憶體大於2G時,為Kdump保留128M的記憶體空間.

  還可以這樣:

crashkernel=128M@16M    #為Kdump保留128M的記憶體空間,記憶體地址從16M(physical address 0x01000000)開始.

1.3 Kdump的儲存

  Kdump的設定在/etc/kdump.cnf中. kdump提供多種方式將捕獲到核心崩潰資料本地儲存或儲存到遠端主機.

#path /var/crash    #kdump本地儲存目錄,預設是存放在/var/crash目錄下,可以根據使用習慣設定.
path /usr/local/cores 
...
#raw /dev/vg/lv_kdump    #kdump可以直接寫入移動媒介.
raw /dev/sdb1
...
#nfs my.server.com:/export/tmp    #kdump可以通過NFS儲存到網路上其它儲存裝置中.
nfs test.example.com:/export/cores
...
#ssh user@my.server.com      #kdump可以通過SSH傳輸協定,儲存遠端主機上.
#sshkey /root/.ssh/kdump_id_rsa
ssh user@test.example.com
sshkey /root/.ssh/mykey

  kdump.conf中還可以在 core_collector makedumpfile 選項後加上" -c ", 使kdump檔案能夠被壓縮,以節省儲存空間.

core_collector makedumpfile -c

systemctl start kdump.service    #啟動Kdump服務
systemctl enable kdump.service    #使Kdump開機自啟
systemctl is-active kdump       #檢查Kdump是否已啟動
active
echo 1 > /proc/sys/kernel/sysrq   #模擬核心崩潰,檢查/var/crash/是否自動儲存Kdump捕獲的核心崩潰資料, 以確定Kdump是否正常工作
echo c > /proc/sysrq-trigger

  需要注意的是

  (1)在RHEL7之前的版本中,kdump的儲存目錄會隨著kdump服務的啟動而由系統自動建立. RHEL7中,如果改變了kdump的儲存目錄,則必須在啟動kdump服務之前,手動建立kdump的儲存目錄,否則kdump服務會啟動失敗.

  (2)如果在安裝介面禁用了kdump, 而安裝完成之後再通過systemctl start kdump啟動kdump, 會報記憶體不足無法啟動的錯誤. kdump的記憶體空間是在核心載入之前由boot分配的, 所以必須修改boot. 最好使用kdump的圖形管理工具 system-config-kdump 載入kdump的預設設定, 使kdump處於可用狀態, 然後重新啟動系統, systemctl status kdump 服務處於啟用狀態(active).

1.4 利用crash功能分析核心崩潰

  利用crash功能元件能夠分析linux核心崩潰時的網路、磁碟、CPU、系統核心狀態,快速定位故障點.

crash元件可以通過RPM包安裝.

sudo yum -y install crash       #安裝crash
sudo debuginfo-install kernel    #安裝核心偵錯模組

sudo crash /usr/lib/debug/lib/modules/<kernel>/vmlinux /var/crash/<timestamp>/vmcore  #啟動crash偵錯

測試一下:

crash基本偵錯命令:

crash>log    #崩潰時紀錄檔記錄
crash>bt     #崩潰時的堆疊資訊
crash>vm     #崩潰時的記憶體狀態
crash>ps     #崩潰時的進程狀態
crash>files   #崩潰時的開啟的檔案
crash>exit   #退出crash

2 linux核心調校

2.1 kernel的調校途徑

  RHEL7中提供三種核心調校方法:

  (1)使用sysctl 命令;

  (2)修改/etc/sysctl.d/ 目錄下的核心組態檔;

  (3)通過shell 在/proc/sys 目錄下掛載虛擬檔案系統;

2.2 sysctl命令可以列出、讀取、設定核心引數, 還可以將引數設定為臨時或永久.

sysctl -a        #列出所有可調校的項
sysctl kernel.version    #列出kernel的版本資訊

sysctl <tunable class>.<tunable>=<value>      #使調校引數臨時生效
sysctl -W <tunable class>.<tunable>=<value>   #使調校引數永久生效

2.3 修改/etc/sysctl.d/99-sysctl.conf 目錄下的99-sysctl.conf檔案

cp /etc/sysctl.d/99-sysctl.conf /etc/sysctl.d/99-sysctl.conf.bak    #備份系統預設的核心引數檔案
vim /etc/sysctl.d/99-my.conf    #建立新的核心引數檔案

...
<tunable class>.<tunable> = <value>   #寫入要調校的引數類和值
 <tunable class>.<tunable> = <value>
...
save    #儲存檔案
reboot sysctl -p /etc/sysctl.d/99-my.conf  #重新啟動系統或者使用sysctl -p 命令載入新的核心引數設定

2.4 sysctl 調校核心引數

(1)調整最大請求的aio數量.

sysctl -a | grep fs.aio    #檢視核心預設的最大aio值
sysctl fs.aio-max-nr=2048576  #臨時調整aio最大值

(2)開啟本地ipv4轉發功能.

sysctl net.ipv4.ip_forward = 1

(3)設定進程能被分配到的最大記憶體空間.

sysctl vm.max_map_count = 65530

(4)設定系統中同時執行的最大進程數.

sysctl kernel.threads-max = 16161

在root許可權下,通過sysctl 命令的核心引數調校, 基本上能直接控制linux 的核心所有行為, 滿足實際生產中的絕大多數需求.

Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx

本文永久更新連結地址https://www.linuxidc.com/Linux/2018-09/153873.htm


IT145.com E-mail:sddin#qq.com