如何调试 Solaris 10 关机时的静默挂起?

如何调试 Solaris 10 关机时的静默挂起?

我们在关闭新镜像的 Oracle/Sun Solaris 10 SPARC 盒时遇到了神秘的挂起。这种情况可重复出现(据我们所知,在同一位置)。我们让它尝试自行解决问题多次,每次 5-10 分钟,但没有任何进展。

我以前从来没见过这样的事情发生。

控制台上显示的最后一项是syslogd发送了信号 15。在我们禁用盒子之前snmpdx,控制台上的最后一项是snmpdx发送了信号 15(syslogd发送信号 15 之后)。

虽然很少发现,但在过去的 Solaris 时代,我可以根据经验更好地了解问题可能出在哪里,然后可以使用脚本echo中愚蠢(但有效)的调试语句进一步缩小问题/etc/*.d范围。有了 SMF,我真的不太确定从哪里开始。

sync我们在提示时强制进行崩溃转储{ok}以供稍后分析,然后让盒子出现,因为它是一个生产服务器并且我们的计划停机窗口即将关闭。

/var/adm/messages毫无用处。

您将如何调试这种情况?有没有办法不再隐藏关机时发生的事情,而是显示正在执行的每件事?(我从来不喜欢自 Solaris 10 以来在启动时隐藏很多东西)

mdbsavecore 的 ps 显示以下进程在挂起时正在运行(afsd 是 OpenAFS 客户端,预计有很多):

> > ::ps
S    PID   PPID   PGID    SID    UID      FLAGS             ADDR NAME
R      0      0      0      0      0 0x00000001 00000000018387c0 sched
R    108      0      0      0      0 0x00020001 00000600110fe010 zpool-silmaril-p
R      3      0      0      0      0 0x00020001 0000060010b29848 fsflush
R      2      0      0      0      0 0x00020001 0000060010b2a468 pageout
R      1      0      0      0      0 0x4a024000 0000060010b2b088 init
R   1327      1   1327    329      0 0x4a024002 00000600176ab0c0 reboot
R    747      1      7      7      0 0x42020001 0000060017f9d0e0 afsd
R    749      1      7      7      0 0x42020001 00000600180104d0 afsd
R    752      1      7      7      0 0x42020001 0000060017cb44b8 afsd
R    754      1      7      7      0 0x42020001 0000060017fc8068 afsd
R    756      1      7      7      0 0x42020001 0000060017fcb0e8 afsd
R    760      1      7      7      0 0x42020001 00000600177f4048 afsd
R    762      1      7      7      0 0x42020001 000006001800f8b0 afsd
R    764      1      7      7      0 0x42020001 000006001800ec90 afsd
R    378      1    378    378      0 0x42020000 0000060013aee480 inetd
R      7      1      7      7      0 0x42020000 0000060010b28008 svc.startd
R    329      7    329    329      0 0x4a024000 00000600110ff850 sh
Z    317      7    317    317      0 0x4a014002 0000060013b3a490 sac 

答案1

/var/svc/log 包含所有受 SMF 控制的服务的日志文件。这至少是调试 SMF 进程问题的起点。

我同意 David 的观点,请检查此服务器中是否存在可能保持打开状态的 NFS 挂载,以及此服务器是否未挂载可能不可用的其他 NFS 文件系统。

答案2

使用 SMF 时,您仍然可以使用老式方法将回显放入脚本中。只需进入 /lib/svc/method 并进行编辑即可。仅从该进程列表来看,我会说它与 AFS 相关,但我没有使用过它。

答案3

我立刻想到了两件事。首先,当客户端关闭并且没有可用的服务器时,我让 NFS 执行此操作。

或者,在调试时,我会考虑-x在启动时使用 sh 或 ksh 选项,假设您仍然可以获取脚本。

答案4

如果您执行了 init 6,tail /var/svc/log/rc6.log 会有所帮助。但是,任何 fmd 问题实例都可能导致它挂起。

相关内容