DUMP檔案概述
為了增強故障分析能力,IBM的伺服器增加了對裝置故障當前環境的儲存功能,就是儲存一份裝置故障時的記憶體、CPU寄存器、IO等裝置的資料和狀態資訊,如果系統並沒有停住,只是某個程式死掉,會產生CORE DUMP,在目前的目錄下產生一個CORE檔案。而如果作業系統死掉,則產生System DUMP或者System Crash,通常會引起系統停機。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
關閉命令
#sysdumpdev -kP
或者使用smitty -> System Environments-> Change / Show Characteristics of System Dump 菜單設定。
2.當系統重啟的時候,如果設定了force copy flag為true,可以有提示讓你將dump複製到外置介質,例如磁帶。這樣磁碟目錄不夠的時候,也有機會保留(往往DUMP裝置與系統交換分區共用同一邏輯卷,而系統啟動後,交換區將被覆蓋)一份系統DUMP。
3.如果想允許DUMP檔案進行壓縮,則使用下列命令
開啟命令
#sysdumpdev -CP
關閉命令
#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
永久地將主要傾印裝置的資料庫物件更改到 /dev/newdisk1,輸入:
#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 |
指定所有將來的轉儲在其寫入傾印裝置之前將其壓縮。 -C 標誌只適用於 AIX 4.3.2 和以後的版本。 |
| -d Directory |
指定系統引導時轉儲所複製到的目錄 。 如果引導時複製失敗,那麼 -d 標誌會忽略系統轉儲。 |
| -D Directory |
指定系統引導時轉儲所複製到的目錄 。 如果引導時複製失敗,那麼使用 -D 標誌允許您將轉儲複製到外部的介質。
註: 使用 -d Directory 或 -D Directory 標誌時, 會檢測下列的錯誤情況:
- 目錄 不存在。
- 目錄 不在本地記錄檔系統裡。
- 目錄 不在 rootvg 卷組中。
|
| -e |
估計當前啟動並執行系統的轉儲大小(以位元組表示)。 如果壓縮轉儲,那麼所顯示的大小是壓縮之後大小的估計值。 |
| -i |
表示從系統函數調用 sysdumpdev 命令。 只有系統公用程式才使用該標誌。如果不是自動 IBM 函數的函數已經修改了有效值,那麼 -i 標誌就不會作請求的更改;也就是說,-i 標誌不會覆蓋先前的更改。 |
| -I |
重新設定先前更改的指示資訊。指定 -I 標誌後,用 -i 標誌就允許更改。 |
| -k |
如果您的機器有鑰匙方式開關,那麼在用複位按鈕或轉儲鍵控序列強制轉儲前,鑰匙需要處於服務位置。這是預設設定。 |
| -K |
如果您的機器有鑰匙方式開關,那麼鑰匙處於正常位置時使用複位按鈕或轉儲鍵序列將強制轉儲,或在沒有鑰匙方式開關的機器上也將強制轉儲。
註: 對於沒有鑰匙方式開關的機器, 不能用複位按鈕強制轉儲,在鑰匙開關沒有設定了該值的機器上也不能轉儲。
|
| -l |
列出主要和輔助傾印裝置、複製目錄和 forcecopy 屬性的當前值。 |
| -L |
顯示最近的系統轉儲的統計資訊。 這包含最近的轉儲的日期和時間、所寫的位元組數和完成狀態。 如果壓縮了轉儲,那麼該標誌既顯示轉儲的原始的未壓縮的大小,也顯示了轉儲的壓縮後的大小。 壓縮後的大小是實際寫入傾印裝置的大小。注: 顯示的轉儲大小可能不會反映介質上的轉儲的精確大小。 由於磁碟和複製塊大小,因此會有小小的差別。 |
| -P |
使 -p 或 -s 標誌指定的傾印裝置成為永久裝置。-P 標誌 只能與 -p 或 -s 標誌一起使用。 |
| -p Device |
暫時將主要傾印裝置更改為指定的裝置。 該裝置可以是邏輯卷或磁帶裝置。對於網路轉儲,該裝置可以是主機名稱和路徑名。 |
| -q |
禁止輸出到標準輸出的所有訊息。如果該標誌 與 -l 、-r 、-z 或 -L 標誌一起使用,則會忽略 -q 命令。 |
| -r Host : Path |
釋放伺服器 Host 上遠程轉儲檔案所使用的空間。Path 指定轉儲檔案的位置。 |
| -s Device |
暫時將輔助傾印裝置更改為指定的裝置。 該裝置可以是邏輯卷或磁帶裝置。對於網路轉儲,該裝置可以是主機名稱和路徑名。 |
| -z |
確定是否出現新的系統轉儲。如果出現,則會將包含轉儲大小(以位元組表示)和傾印裝置名的字串寫到標準輸出。如果不存在新的系統轉儲,則不返回任何東西。 在現有的系統轉儲上運行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
其中 PP SIZE: 256 megabyte(s)
PPs: 6
即,現在容量為1.5G.
6.使用dumpcheck命令查看,是否還出現errpt資訊
#/usr/lib/ras/dumpcheck
#errpt
不出現,則為成功.