本章介绍如何在 Oracle Solaris OS 中管理系统故障转储信息。
有关与管理系统故障转储信息相关的过程信息,请参见管理系统故障转储信息(任务图)。
本节介绍此 Oracle Solaris 发行版中用于管理系统资源的新增功能或已更改的功能。
Oracle Solaris 10 9/10:此功能增强使系统能够在更短的时间内使用更少的空间保存故障转储信息。完成故障转储所需的时间现在加快了 2 到 10 倍,具体取决于平台。在 savecore 目录中保存故障转储所需的磁盘空间量以相同的系数缩减。要加快故障转储文件的创建和压缩,快速故障转储工具可利用大型系统中较少使用的 CPU。新的故障转储文件 vmdump.n 是 vmcore.n 和 unix.n 文件的压缩版本。经过压缩的故障转储文件在网络上传输的速度更快,而且随后可离线分析。请注意,转储文件必须先解压缩,然后 mdb 实用程序之类的工具才能使用此文件。您可以通过使用 savecore 命令从本地或远程解压缩转储文件。
为了支持新的故障转储工具,已将 -z 选项添加至 dumpadm 命令。使用此选项可指定是以压缩格式还是未压缩格式保存转储文件。缺省值为压缩格式。
有关更多信息,请参见 dumpadm(1M) 和 savecore(1M) 手册页。
以下任务图提供了管理系统故障转储信息所需的过程。
任务 |
说明 |
参考 |
---|---|---|
1. 显示当前的故障转储配置。 |
使用 dumpadm 命令显示当前的故障转储配置。 | |
2. 修改故障转储配置。 |
使用 dumpadm 命令指定要转储的数据类型、系统是否使用专用转储设备和用于保存故障转储文件的目录,以及在写入故障转储文件后必须保持可用的空间量。 | |
3. 检查故障转储文件。 |
使用 mdb 命令查看故障转储文件。 | |
4. (可选)从完整的故障转储目录中恢复。 |
系统崩溃,但 savecore 目录中没有可用空间,并且您需要保存一些关键的系统故障转储信息。 | |
5. (可选)禁用或启用故障转储文件的保存。 |
使用 dumpadm 命令禁用或启用故障转储文件的保存。缺省情况下,会启用故障转储文件的保存。 |
系统崩溃可能是由于存在硬件故障、I/O 问题和软件错误而引起的。如果系统崩溃,则会在控制台中显示一条错误消息,然后向转储设备中写入物理内存的副本。然后,将自动重新引导系统。系统重新引导时,将执行 savecore 命令以从转储设备检索数据并将保存的故障转储文件写入 savecore 目录。保存的故障转储文件可向您的支持服务提供商提供宝贵的信息,从而辅助诊断问题。
故障转储信息以压缩格式写入 vmdump. n 文件中,其中 n 是标识故障转储的一个整数。随后,可在同一系统或其他系统中调用 savecore 命令以将压缩的故障转储文件扩展为名为 unix. n 和 vmcore.n 的文件对。还可以使用 dumpadm 命令配置重新引导时保存故障转储文件的目录。
对于具有 UFS 根文件系统的系统,缺省转储设备配置为相应的交换分区。交换分区是保留为操作系统虚拟内存备份存储的磁盘分区。因此,永久信息不会位于将被故障转储覆写的交换分区中。对于具有 Oracle Solaris ZFS 根文件系统的系统,专用的 ZFS 卷将用于交换和转储区域。有关更多信息,请参见交换区域和转储设备的 Oracle Solaris ZFS 支持。
如果您在软件初始安装期间选择 Oracle Solaris ZFS 根文件系统,或使用 Oracle Solaris Live Upgrade 从 UFS 根文件系统迁移到 ZFS 根文件系统,则会在 ZFS 根池中的 ZFS 卷上创建交换区域。交换卷的大小可按照物理内存的一半计算,但不超过 2 GB 且不少于 512 MB。转储卷的大小由内核基于 dumpadm 信息和物理内存大小进行计算。可以在 JumpStart 配置文件中或初始安装期间将交换和转储卷的大小调整为您选择的大小(只要您选择的新大小支持系统操作)。 有关更多信息,请参见《Oracle Solaris ZFS 管理指南》中的“对于交换和转储设备的 ZFS 支持”。
如果安装后需要修改 ZFS 交换区域或转储区域,可以像在先前的发行版中那样使用 swap 或 dumpadm 命令。
有关本文档中管理转储设备的信息,请参见管理系统故障转储信息。
如果在 GRUB 引导环境中基于 x86 的系统发生系统崩溃,则管理 GRUB 引导归档文件的 SMF 服务 svc:/system/boot-archive:default 可能在下一次系统重新引导时失败。有关基于 GRUB 进行引导的更多信息,请参见《系统管理指南:基本管理》中的“使用 GRUB 引导基于 x86 的系统(任务图)”。
savecore 命令在系统崩溃后自动运行,以便从转储设备检索故障转储信息,并写入名为 unix.X 和 vmcore.X 的两个文件,其中 X 标识转储序列号。这些文件共同表示保存的系统故障转储信息。
故障转储文件有时容易与核心转储文件混淆,后者是在应用程序异常终止时写入的用户应用程序的映像。
故障转储文件保存在预先确定的目录中,该目录缺省为 /var/crash/hostname。在先前的发行版中,除非手动使系统将物理内存的映像保存到故障转储文件中,否则系统重新引导时会覆写故障转储文件。现在,缺省情况下便可保存故障转储文件。
使用 dumpadm 命令可以管理系统故障转储信息。有关更多信息,请参见dumpadm 命令。
使用 mdb 实用程序可以检查控制结构、活动表、正常运行或崩溃的系统内核的内存映像,以及有关内核运行的其他信息。要最大程度地发挥 mdb 的作用,需要具备有关内核的详细知识,这超出了本手册的范围。有关使用此实用程序的信息,请参见 mdb(1) 手册页。
此外,还可以将 savecore 保存的故障转储发送给客户服务代表,这有助于他们分析系统崩溃的原因。
使用 dumpadm 命令可以管理 Oracle Solaris OS 中的系统故障转储信息。
使用 dumpadm 命令可以配置操作系统的故障转储。dumpadm 配置参数包括转储内容、转储设备和保存故障转储文件的目录。
转储数据以压缩格式存储在转储设备中。内核故障转储映像的大小可以是 4 GB 或更大。压缩数据意味着转储速度更快,且转储设备所需的磁盘空间更小。
当专用转储设备(而不是交换区域)属于转储配置的一部分时,会在后台运行故障转储文件的保存。这意味着引导系统不等待 savecore 命令完成,便转到下一步。在较大的内存系统中,可在 savecore 完成前使用系统。
缺省情况下,会保存 savecore 命令生成的系统故障转储文件。
savecore -L 命令是一个新增功能,通过该功能可以获取当前运行的 Oracle Solaris OS 的故障转储。此命令用于通过在某些发生故障的状态下(例如瞬态性能问题或服务故障)捕获内存快照,对正在运行的系统进行故障排除。如果系统已启动,并且您仍可以运行一些命令,则可执行 savecore -L 命令将系统快照保存到转储设备,然后立即将故障转储文件写入 savecore 目录。由于系统仍在运行,因此如果配置了专用转储设备,则只能使用 savecore -L 命令。
转储参数 |
说明 |
---|---|
转储设备 |
在系统崩溃时临时存储转储数据的设备。当转储设备不是交换区域时,savecore 将在后台运行,这样可以加快引导过程进行的速度。 |
savecore 目录 |
存储系统故障转储文件的目录。 |
转储内容 |
要转储的内存数据的类型。 |
最小空闲空间 |
保存故障转储文件后 savecore 目录中所需的最小空闲空间量。如果未配置最小空闲空间,则缺省值为 1 MB。 |
有关更多信息,请参见 dumpadm(1M)。
转储配置参数由 dumpadm 命令管理。
在系统启动过程中,svc:/system/dumpadm:default 服务调用 dumpadm 命令以配置故障转储参数。
具体地说,dumpadm 通过 /dev/dump 接口来初始化转储设备和转储内容。
完成转储配置后,savecore 脚本会查找故障转储文件目录的位置。然后,会调用 savecore 来检查故障转储,并检查故障转储目录中 minfree 文件的内容。
由于可访问性和性能原因,请不要配置受卷管理产品(例如 Solaris Volume Manager)控制的专用转储设备。可以使交换区域受 Solaris Volume Manager 控制,这是推荐的做法,但应使转储设备保持独立。
在处理系统故障转储信息时,请记住以下几点重要内容:
只有成为超级用户或同等角色的用户,才能访问和管理系统故障转储信息。
不要禁用保存系统故障转储的选项。系统故障转储文件提供了用于确定系统崩溃原因的非常有价值的方法。
在将重要的系统故障转储信息发送给客户服务代表之前,不要删除这些信息。
成为超级用户或同等角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。
显示当前的故障转储配置。
# dumpadm Dump content: kernel pages Dump device: /dev/dsk/c0t3d0s1 (swap) Savecore directory: /var/crash/venus Savecore enabled: yes Saved compressed: on |
前面的示例输出表明:
转储内容是内核内存页面。
内核内存将在交换设备 /dev/dsk/c0t3d0s1 中转储。使用 swap -l 命令可以确定所有交换区域。
系统故障转储文件将写入 /var/crash/venus 目录。
已启用故障转储文件的保存。
以压缩格式保存故障转储。
成为超级用户或同等角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。
确定当前的故障转储配置。
# dumpadm Dump content: kernel pages Dump device: /dev/dsk/c0t3d0s1 (swap) Savecore directory: /var/crash/pluto Savecore enabled: yes Save commpressed: on |
此输出标识了运行 Oracle Solaris 10 发行版的系统的缺省转储配置。
修改故障转储配置。
# /usr/sbin/dumpadm [-nuy] [-c content-type] [-d dump-device] [-m mink | minm | min%] [-s savecore-dir] [-r root-dir] [-z on | off] |
指定要转储的数据类型。使用 kernel 转储所有内核内存,使用 all 转储所有内存,或使用 curproc 转储内核内存以及在发生崩溃时其线程正在执行的进程的内存页面。缺省转储内容是内核内存。
指定在系统崩溃时临时存储转储数据的设备。主交换设备是缺省转储设备。
通过在当前的 savecore 目录中创建 minfree 文件,指定用于保存故障转储文件的最小空闲磁盘空间。可以 KB (nnnk)、MB (nnnm) 或文件系统大小百分比 (nnn%) 的形式指定此参数。savecore 命令会在写入故障转储文件之前访问此文件。如果写入故障转储文件(根据大小)会减少空闲空间量并使其低于 minfree 阈值,则不写入转储文件,并记录一条错误消息。有关从此情况中恢复的信息,请参见如何从完整的故障转储目录中恢复(可选)。
指定重新引导系统时不应运行 savecore。不推荐使用此转储配置。如果已将系统故障转储信息写入交换设备并且未启用 savecore,则系统开始交换时将覆写故障转储信息。
指定用于存储故障转储文件的备用目录。缺省目录为 /var/crash/hostname,其中 hostname 是 uname -n 命令的输出。
强制更新基于 /etc/dumpadm.conf 文件内容的内核转储配置。
修改转储配置以在重新引导时自动执行 savecore 命令,即此转储设置的缺省值。
修改转储配置以控制重新引导时 savecore 命令的操作。on 设置允许以压缩格式保存核心转储文件。off 设置会自动解压缩故障转储文件。由于故障转储文件可能非常大,而以压缩格式保存需要的文件系统空间较少,因此默认值为 on。
在此示例中,所有内存都会转储到专用转储设备 /dev/dsk/c0t1d0s1 中,并且在保存故障转储文件后必须可用的最小空闲空间为文件系统空间的 10%。
# dumpadm Dump content: kernel pages Dump device: /dev/dsk/c0t3d0s1 (swap) Savecore directory: /var/crash/pluto Savecore enabled: yes Save compressed: on # dumpadm -c all -d /dev/dsk/c0t1d0s1 -m 10% Dump content: all pages Dump device: /dev/dsk/c0t1d0s1 (dedicated) Savecore directory: /var/crash/pluto (minfree = 77071KB) Savecore enabled: yes Save compressed: on |
成为超级用户或同等角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。
# /usr/bin/mdb [-k] crashdump-file |
通过假定文件为操作系统故障转储文件来指定内核调试模式。
指定操作系统故障转储文件。
显示崩溃状态信息。
# /usr/bin/mdb file-name > ::status . . . > ::system . . . |
以下示例显示 mdb 实用程序的样例输出,其中包括系统信息,并列出在此系统的 /etc/system 文件中设置的可调参数。
# /usr/bin/mdb -k unix.0 Loading modules: [ unix krtld genunix ip nfs ipc ptm ] > ::status debugging crash dump /dev/mem (64-bit) from ozlo operating system: 5.10 Generic (sun4u) > ::system set ufs_ninode=0x9c40 [0t40000] set ncsize=0x4e20 [0t20000] set pt_cnt=0x400 [0t1024] |
在此情况下,系统崩溃,但 savecore 目录中没有任何可用空间,并且您要保存一些关键的系统故障转储信息。
成为超级用户或同等角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。
在系统中禁用或启用故障转储的保存。
# dumpadm -n | -y |
此示例说明如何在系统中禁用故障转储的保存。
# dumpadm -n Dump content: all pages Dump device: /dev/dsk/c0t1d0s1 (dedicated) Savecore directory: /var/crash/pluto (minfree = 77071KB) Savecore enabled: no Save Compressed: on |
此示例说明如何在系统中启用故障转储的保存。
# dumpadm -y Dump content: all pages Dump device: /dev/dsk/c0t1d0s1 (dedicated) Savecore directory: /var/crash/pluto (minfree = 77071KB) Savecore enabled: yes Save compressed: on |