FreeBSD 的 kernel debugging & textdump(4)

今天因為某組Web機器當機實在當太嚴重了,因為我們發現問題是出在NFS,所以我們把 KDB 跟 DDB 編進去準備來找問題。

當發生問題的時候,由於機器不會當死,所以可以在Console按Ctrl-Alt-ESC進DDB。進了DDB以後,可以用textdump(4)來紀錄所下的指令以及其output。紀錄的資料會dump在dump device(通常是swap),等下次開機的時候會存到/var/crash裡面。

大概的作法是這樣:

  1. 先Ctrl-Alt-ESC進DDB
  2. textdump set # 開始 textdump
  3. capture on # 下面的指令都要記錄下來
  4. show allpcpu; bt; ps; alltrace; show alllock # 要紀錄的資訊
  5. call doadump # dump到dump device
  6. reset # 重開機

如果發現出來的結果會被截掉的話,要把textdump的capture buffer加大:

sysctl debug.ddb.capture.bufsize=196608