我们在关闭新镜像的 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 以来在启动时隐藏很多东西)
mdb
savecore 的 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 问题实例都可能导致它挂起。