调试 Nexenta/OpenSolaris 核心文件?

调试 Nexenta/OpenSolaris 核心文件?

我有一台 Sun x4540,最近从早期的 OpenSolaris 转换为 NexentaStor Enterprise Edition。系统磁盘被清除,zpools 被导出并重新导入。我通过 NFS 和 10GbE 将大约 30 台虚拟机托管到 VMWare vSphere 上,并连接到多台主机。

从那时起,系统几乎每两周就会崩溃一次。崩溃会触发 ILOm 的 ASR,系统会在 5-10 分钟后自行重启。我在根目录中有这样的核心文件:

-rw-------   1 root root 2237608178 Mar 14 21:06 core
-rw-------   1 root root   81061304 Feb  8 01:23 core.mountd.1297149806
-rw-------   1 root root   69863784 Mar  6 16:34 core.mountd.1299450869
-rw-------   1 root root   36644272 Mar  6 16:39 core.mountd.1299451179

我该如何调试这些以mdb了解发生了什么?我在以下网址看到了链接到 Nexenta 网站的简短教程:http://kristof.willen.be/node/1100,但似乎不能直接适用。

答案1

这里的关键是切换到目录并对崩溃转储文件/var/crash/myhost运行命令。该过程会创建一个可供命令使用的文件,其中“x”是核心转储编号。savecore -f vmdump.xunix.xmdb -k unix.x vmcore.x

答案2

你知道内核本身是否崩溃了吗?启用内核转储可能也是值得的。

查看下面的 URL 以获取有关如何分析核心文件以及如何启用内核崩溃转储的说明。

http://developers.sun.com/solaris/articles/manage_core_dump.html

# mkdir -p /var/crash/`uname -n`
# dumpadm -y -s /var/crash/`uname -n`
# dumpadm 
      Dump content: kernel pages
       Dump device: /dev/zvol/dsk/rpool/dump (dedicated)
Savecore directory: /var/crash/$hostname
  Savecore enabled: yes

# mkdir -p /var/core/`uname -n`
# coreadm -g /var/core/`uname -n`/core.%n.%f.%p -G all -e log -e global
# coreadm 
     global core file pattern: /var/core/$hostname/core.%n.%f.%p
     global core file content: all
       init core file pattern: core
       init core file content: default
            global core dumps: enabled
       per-process core dumps: enabled
      global setid core dumps: disabled
 per-process setid core dumps: disabled
     global core dump logging: enabled

相关内容