天天看點

AIX的Dump檔案學習筆記(原創)

dump檔案概述 

為了增強故障分析能力,ibm的伺服器增加了對裝置故障目前環境的儲存功能,就是儲存一份裝置故障時的記憶體、cpu寄存器、io等裝置的資料和狀态資訊,如果系統并沒有停住,隻是某個程式死掉,會産生core dump,在目前目錄下産生一個core檔案。而如果作業系統死掉,則産生system dump或者system crash,通常會引起系統停機。dump的記錄如下圖所示。

AIX的Dump檔案學習筆記(原創)
AIX的Dump檔案學習筆記(原創)

作為一般客戶通常隻需要收集dump資訊,并回報給ibm工程師即可。當發生系統dump時,機器将會被宕下來。可能的原因包括:系統在進行核心操作時發生了未知的意外或者不能對其進行正常處理,都會引起dump。也可以由系統管理者發出指令,強制系統dump。

當系統進行dump時,dump管理設施自動将核心相關的資料(kernel segment0及其他由核心或者核心擴充程式記錄在主dump表中的記憶體塊)複制到主dump裝置。可以把dump了解為系統當時的一個快照,供以後分析,分析dump可以在其他機器上進行,但需要複制一份此機器的核心程式,即unix_mp或unix_mp64.沒有對應于dump的核心程式是午飯進行dump分析的。

dump的生成過程

core dump的生成過程

 在程序運作出現異常行為時,例如無效位址通路、浮點異常、指令異常等,将導緻系統轉入核心态進行異常處理(即中斷處理),向相應的程序發出特定信号例如 sigsegv、sigfpe、sigill 等。如果應用程序注冊了相應信号的處理函數(例如可通過 sigaction 注冊信号處理函數),則調用相應處理函數進行處理(應用程式可以選擇記錄資訊後生成 core dump 并退出);否則将采取預設動作,例如 sigsegv 的預設動作是生成 core dump 并退出程式。

程序 coredump 的時候,作業系統會将程序終止并釋放其占用的資源,正常情況下,應用程序 coredump 不會對系統本身的運作造成危害。當然如果系統中存在與此程序相關的其他程序,則這些程序會受到影響,至于後果則視其對此異常的具體處理而定。

 由于相關指令已經包含在可執行檔案中,core 檔案一般隻包含程序異常時相關的記憶體資訊。其格式可參考 /usr/include/sys/core.h 或者 aix 幫助文檔的“files reference”章節。我們一般需要結合 core 檔案以及可執行程式,來分析問題所在

 注:由于程序信号處理本質上是異步的,應用程序注冊的信号處理函數中使用的例程需要保證是異步信号安全的,例如不能使用諸如 pthread_ 開頭的例程。 

系統 dump 生成過程 

系統異常 dump 的具體過程與應用程序類似,但由于更接近底層,為了避免問題所在的資源(例如檔案系統)正好包含在生成 dump 需要使用的資源中,造成 dump 無法生成,作業系統一般會用最簡單的方式來生成 dump。例如系統記憶體小于 4g 的情況下,一般直接将 dump 生成在 pagingspace 中;大于 4g 時,會建專門的 lg_dumplv 邏輯卷(裸裝置),預設的dump裝置/dev/hd6,次裝置是/dev/sysdumpnull儲存 dump 資訊。在系統重新開機的時候,如果設定的 dump 轉存目錄(檔案系統中的目錄)有足夠空間,它将會轉存成一個檔案系統檔案,預設情況下,是 /var/adm/ras/ 下的 vmcore* 這樣的檔案。

下面是常見的轉儲裝置大小規則

當伺服器的記憶體大于4gb時,在安裝aix時,就會為系統 dump 建立一專用區域,該邏輯卷名就是 lg_dumplv. 其預設大小是按以下規則配置設定的:

4gb < = 伺服器的記憶體 〈 12gb lg_dump 的大小為 1gb

12gb < = 伺服器的記憶體 〈 24gb lg_dump 的大小為 2gb

24gb < = 伺服器的記憶體 〈 48gb lg_dump 的大小為 3gb

48gb < = 伺服器的記憶體 lg_dump 的大小為 4gb 

系統 dump 一般可以通過更新微碼、提高系統更新檔級别、更新驅動等方式解決。

環境變量設定 

可以通過 /etc/security/limits 檔案對各使用者的基本配置參數包括 core 大小進行限制。或者通過 ulimit 更改目前環境下的 core 大小限制。

預設情況下,應用程序生成 core dump 時都使用檔案名 core。為了避免同一工作目錄下的程序 core 互相覆寫,可以定義環境變量 core_naming=true,然後啟動程序,這樣将生成名為 core.pid.ddhhmmss 的檔案。可以使用 file core 指令檢視 core 是哪個程序産生的。

預設情況下,應用程序 dump 時會包含所有的共享記憶體,如果 dump 時想排除共享記憶體内容,可以在啟動程序之前設定環境變量 core_noshm=true.

系統有一個參數 fullcore 用于控制是否在程式 coredump 時生成完整的 core。為避免資訊丢失,建議打開 fullcore。可以使用 lsattr –el sys0 查詢是否将 fullcore 打開,使用 chdev -l sys0 -a fullcore=true 将 fullcore 狀态更改為打開。如果想讓系統dump後自動重新啟動,(對于遠端管理者比較有用,否則管理者必須到現場按開關重新啟動計算機,可以執行 lsattr –el sys0 檢視autorestart是否為true,使用 chdev -l sys0 -a autorestart=true 将 autorestart狀态更改為打開。兩者都可以通過smit chgsys的smit菜單來修改

dump檔案管理

由于dump檔案較為複雜而且一般都交給ibm工程師進行分析,在次本文不做讨論,下文主要探讨dump檔案的管理。

檢視目前dump裝置的配置資訊

#sysdumpdev -l

primary              /dev/lg_dumplv           ##主dump裝置 

secondary            /dev/sysdumpnull      ##次dump裝置 

copy directory       /var/adm/ras            ##dump檔案拷貝目錄 

forced copy flag     true                       ##是否進行提示将dump檔案複制到外設 

always allow dump    false                  ##總是進行dump 

dump compression     on                     ##是否啟用dump檔案壓縮 

type of dump         traditional 

注意

1.舊版本的 aix “always allow dump”可能預設為關閉;為友善系統 crash 時問題定位,建議打開。當該選項設定為true時,當按下伺服器reset按鈕或者預先設定的dump鍵盤序列的時候系統會自動生成dump。

打開指令

#sysdumpdev -kp

關閉指令

或者使用smitty -> system environments-> change / show characteristics of system dump 菜單設定。

2.當系統重新開機的時候,如果設定了force copy flag為true,可以有提示讓你将dump複制到外置媒體,例如錄音帶。這樣磁盤目錄不夠的時候,也有機會保留(往往dump裝置與系統交換分區共用同一邏輯卷,而系統啟動後,交換區将被覆寫)一份系統dump。

3.如果想允許dump檔案進行壓縮,則使用下列指令

#sysdumpdev -cp

sysdump指令使用示例

建立dump裝置

#mklv -y dumplv -t sysdump rootvg 10 

将邏輯卷 hd7 臨時指派為主要轉儲裝置:

#sysdumpdev  -p /dev/hd7

估計需要的轉儲裝置大小:

#sysdumpdev  -e 或者 smit dump_estimate

将錄音帶裝置 rmt0 臨時指派為輔助轉儲裝置:

#sysdumpdev  -s /dev/rmt0 

顯示先前的轉儲的統計資訊:

#sysdumpdev  -l 

#sysdumpdev  -p  -p /dev/newdisk1 

确定是否存在新的系統轉儲,輸入:

#sysdumpdev  -z 

如果最近發生了系統轉儲,則會出現與下列相似的輸出:

4537344 /dev/hd7

将遠端轉儲檔案 /var/adm/ras/systemdump(在主機 mercury 上)指派給主要轉儲裝置,輸入:

#sysdumpdev  -p mercury:/var/adm/ras/systemdump 

在主機名和檔案名之間必須輸入冒号 :。

指定系統崩潰後轉儲要複制到其上的目錄(如果轉儲裝置是 /dev/hd6),輸入:

#sysdumpdev  -d /tmp/dump 

這會在系統崩潰後試圖将轉儲從 /dev/hd6 複制到 /tmp/dump。如果在複制過程中出現了錯誤,那麼系統繼續引導,但是丢失了轉儲。

指定系統崩潰後轉儲所要複制其上的目錄,如果轉儲裝置是 /dev/hd6,輸入:

#sysdumpdev  -d /tmp/dump

這會在崩潰後嘗試将轉儲從 /dev/hd6 複制到 /tmp/dump 目錄。如果複制失敗,那麼會提示您一個菜單以允許手工将轉儲複制到某個外部媒體。

-c

指定不壓縮轉儲。-c 标志隻适用于 aix 4.3.2 和以後的版本。

指定所有将來的轉儲在其寫入轉儲裝置之前将其壓縮。 -c 标志隻适用于 aix 4.3.2 和以後的版本。

指定系統引導時轉儲所複制到的目錄 。 如果引導時複制失敗,那麼 -d 标志會忽略系統轉儲。

指定系統引導時轉儲所複制到的目錄 。 如果引導時複制失敗,那麼使用 -d 标志允許您将轉儲複制到外部的媒體。

注: 使用 -d directory 或 -d directory 标志時, 會檢測下列的錯誤情況:

<a></a>

估計目前運作的系統的轉儲大小(以位元組表示)。 如果壓縮轉儲,那麼所顯示的大小是壓縮之後大小的估計值。

表示從系統函數調用 sysdumpdev 指令。 隻有系統實用程式才使用該标志。如果不是自動 ibm 函數的函數已經修改了有效值,那麼 -i 标志就不會作請求的更改;也就是說,-i 标志不會覆寫先前的更改。

重新設定先前更改的訓示資訊。指定 -i 标志後,用 -i 标志就允許更改。

如果您的機器有鑰匙方式開關,那麼在用複位按鈕或轉儲鍵控序列強制轉儲前,鑰匙需要處于服務位置。這是預設設定。

如果您的機器有鑰匙方式開關,那麼鑰匙處于正常位置時使用複位按鈕或轉儲鍵序列将強制轉儲,或在沒有鑰匙方式開關的機器上也将強制轉儲。

注: 對于沒有鑰匙方式開關的機器, 不能用複位按鈕強制轉儲,在鑰匙開關沒有設定了該值的機器上也不能轉儲。

列出主要和輔助轉儲裝置、複制目錄和 forcecopy 屬性的目前值。

注:

顯示的轉儲大小可能不會反映媒體上的轉儲的精确大小。 由于磁盤和複制塊大小,是以會有小小的差别。

使 -p 或 -s 标志指定的轉儲裝置成為永久裝置。-p 标志 隻能與 -p 或 -s 标志一起使用。

暫時将主要轉儲裝置更改為指定的裝置。 該裝置可以是邏輯卷或錄音帶裝置。對于網絡轉儲,該裝置可以是主機名和路徑名。

禁止輸出到标準輸出的所有消息。如果該标志 與 -l 、-r 、-z 或 -l 标志一起使用,則會忽略 -q 指令。

釋放伺服器 host 上遠端轉儲檔案所使用的空間。path 指定轉儲檔案的位置。

暫時将輔助轉儲裝置更改為指定的裝置。 該裝置可以是邏輯卷或錄音帶裝置。對于網絡轉儲,該裝置可以是主機名和路徑名。

确定是否出現新的系統轉儲。如果出現,則會将包含轉儲大小(以位元組表示)和轉儲裝置名的字元串寫到标準輸出。如果不存在新的系統轉儲,則不傳回任何東西。 在現有的系統轉儲上運作sysdumpdev -z 指令後,就不認為轉儲是最新的了。

errpt報錯e87ef1be的解決方案

e87ef1be   0926082807 p o dumpcheck      the largest dump device is too small.

資訊.斷定為存放dump檔案的lg_dumplv容量不夠.一般推薦的 dump device 值大小為 sysdumpdev –e 估計值的 1.5 倍。

需要擴容.擴容步驟如下:

1.檢視lg_dumplv大小的估計值

#sysdumpdev -e

0453-041 estimated dump size in bytes: 1287651328 

即1.2g

2.現在lg_dumplv大小

#lslv lg_dumplv 

其中pp size:        256 megabyte(s)

       pps:            4

經計算,現在容量為1g.需要擴容0.2g

3.檢視lg_dumplv所在的vg的容量是否夠用

 #lsvg rootvg 

  其中 pp size:        256 megabyte(s)

         total pps:      1092 (279552 megabytes)

         free pps:       826 (211456 megabytes)

經計算,vg剩餘容量為206.5g,因為根盤做了鏡像.故,可用剩餘容量為103g左右.因pp size為256m,故擴容2pps,即0.5g(其實擴1個pp也可以.2個放心點.)

4.擴容操作

 #extendlv lg_dumplv 2 

如果是paging空間的dump話,應該 #chps -s n hd6 (n為多少lp)

5.檢查目前lg_dumplv的大小.

  #lslv lg_dumplv 

         pps:            6

即,現在容量為1.5g.

6.使用dumpcheck指令檢視,是否還出現errpt資訊

  #/usr/lib/ras/dumpcheck

  #errpt

不出現,則為成功.

參考至:《走進ibm小型機世界》orian著

            http://www.kuqin.com/aixcmds/aixcmds5/sysdumpdev.htm

            http://tech.cncms.com/os/unix/83840.html

            http://jbweng.blog.163.com/blog/static/677153320101114101013796/

            http://www.ibm.com/developerworks/cn/aix/library/0806_chench_core/#2. 應用程序 core dump 分析 |outline

本文原創,轉載請注明出處、作者

如有錯誤,歡迎指正

郵箱:[email protected]

作者:czmmiao 原文位址:http://czmmiao.iteye.com/blog/1144999