最近,我使用了 9 年的 Apple G4 文件服务器随机崩溃。通常是内核崩溃,但有时系统会锁定。这种情况似乎总是在我不在办公室时发生……但即使我在办公室,系统也位于单独的服务器机房中,控制台旁几乎从未有人。我怀疑是内存问题,因此运行了 memtest,但 20 次之后没有发现任何问题。(我运行了 10 次,重新启动,然后又运行了 10 次。两次都是单用户模式)。Apple Hardware Test 也报告没有问题(在循环运行超过 100 次之后)
我怀疑硬件出了问题……是毕竟已经 9 年了。但是我们目前没有预算来更换服务器。在下一次升级之前,我最好的选择是什么?有什么方法可以解决崩溃问题?或者至少,有什么方法可以让系统在内核崩溃或锁定后自动重启,以便恢复服务?
panic.log显示:
Mon Jun 29 12:52:23 2009
panic(cpu 1 caller 0x00040180): zalloc: "socket" (751876 elements) retry fail 3
Latest stack backtrace for cpu 1:
Backtrace:
0x000954F8 0x00095A10 0x00026898 0x00040180 0x0026B868 0x00290E10 0x00290F1C 0x00296B40
0x002ABDB8 0x000ABD30 0x00000000
Proceeding back via exception chain:
Exception state (sv=0x32288780)
PC=0x9001B08C; MSR=0x0000F030; DAR=0x12555000; DSISR=0x42000000; LR=0x8EF88A00; R1=0xBFFFF700; XCP=0x0000003
0 (0xC00 - System call)
Kernel version:
Darwin Kernel Version 8.11.0: Wed Oct 10 18:26:00 PDT 2007; root:xnu-792.24.17~1/RELEASE_PPC
*********
Fri Jul 3 10:15:24 2009
panic(cpu 1 caller 0x00040180): zalloc: "socket" (762004 elements) retry fail 3
Latest stack backtrace for cpu 1:
Backtrace:
0x000954F8 0x00095A10 0x00026898 0x00040180 0x0026B868 0x00290E10 0x00290F1C 0x00296B40
0x002ABDB8 0x000ABD30 0x00000000
Proceeding back via exception chain:
Exception state (sv=0x2C543000)
PC=0x9001B08C; MSR=0x0000F030; DAR=0x11A41000; DSISR=0x42000000; LR=0x8EF88A00; R1=0xBFFFF700; XCP=0x0000003
0 (0xC00 - System call)
Kernel version:
Darwin Kernel Version 8.11.0: Wed Oct 10 18:26:00 PDT 2007; root:xnu-792.24.17~1/RELEASE_PPC
*********
Tue Jul 21 20:44:47 2009
panic(cpu 1 caller 0x00040180): zalloc: "socket" (762004 elements) retry fail 3
Latest stack backtrace for cpu 1:
Backtrace:
0x000954F8 0x00095A10 0x00026898 0x00040180 0x0026B868 0x00290E10 0x00290F1C 0x00296B40
0x002ABDB8 0x000ABD30 0x00000000
Proceeding back via exception chain:
Exception state (sv=0x2C543000)
PC=0x9001B08C; MSR=0x0000F030; DAR=0x11A41000; DSISR=0x42000000; LR=0x8EF88A00; R1=0xBFFFF700; XCP=0x0000003
0 (0xC00 - System call)
Kernel version:
Darwin Kernel Version 8.11.0: Wed Oct 10 18:26:00 PDT 2007; root:xnu-792.24.17~1/RELEASE_PPC
*********
答案1
我假设如果它作为文件服务器运行,那么它运行的是 Mac OS X Server,对吗?如果它在内核崩溃后没有自动重启,那么您的硬件已经足够旧,可能不支持此功能,因为它是服务器上的默认设置。
显然,如果不是内核崩溃而只是挂起,服务器将不会尝试重新启动,但我发现精密电路开赛!是解决该问题的绝佳方案。基本上,他们的软件会不时地在电源直通中 ping 硬件,如果盒子锁定并停止 ping,则它会循环电源。瞧!自动重启,内核崩溃或没有!
答案2
我假设您已经查看过 CrashReporter 和其他系统日志,看看其中是否出现任何有趣的内容。
但是,当试图让旧机器多运行一些时间时,我做的第一件事就是检查冷却系统 - 清除机器包装盒中的所有灰尘,然后检查以确保风扇正常转动。
...如果您正在运行客户端,并采纳 morgant 的建议进行电源循环,请在“节能器 -> 选项”中查找“断电后自动重启”。如果您正在运行 OS X Server,您还可以在此处找到“服务器“冻结”时自动重启”的设置。
答案3
您知道是什么原因导致内核崩溃吗?计算机在哪个特定的内核扩展上出现故障?
我在一个不相关的问题上发表了一些关于如何阅读内核恐慌日志的文章超级用户希望有帮助:
如果不是软件包,您可以从内核崩溃中找出 kext 的名称:您可以在
~/Library/Logs/panic.log
或在崩溃后重新启动计算机时找到此信息,它会询问您是否要向 Apple 报告错误。按“报告”,然后单击中心选项卡以查看崩溃详细信息。例如:
panic(cpu 0 caller 0x0035C330): freeing free mbuf Backtrace, Format - Frame : Return Address (4 potential args on stack) 0x2545bc08 : 0x128d08 (0x3c9afc 0x2545bc2c 0x131de5 0x0) 0x2545bc48 : 0x35c330 (0x3ea258 0x3ae65000 0x23935100 0x493e0) 0x2545bc88 : 0x7424a4 (0x36f19300 0x493e0 0x0 0x134b11) 0x2545bca8 : 0x9f1458 (0x23935000 0x36f19300 0x0 0x0) 0x2545bcd8 : 0x9ef6d6 (0x23935000 0x36f19300 0x0 0x0) 0x2545bcf8 : 0x9fa0ce (0x23935000 0x36f15f00 0x1000000 0x0) 0x2545bea8 : 0x9f375a (0x23935000 0x3a14880 0x40000000 0x34fb8b) 0x2545bf08 : 0x398f79 (0x23935000 0x3a14880 0x1 0x13becf) 0x2545bf58 : 0x39814b (0x3a14880 0x4121d48 0x4121d8c 0x0) 0x2545bf88 : 0x397e81 (0x3a184c0 0x5d3734 0x452084 0x40431f4) 0x2545bfc8 : 0x19a77c (0x3a184c0 0x0 0x19d0b5 0x696543c) Backtrace terminated-invalid frame pointer 0x0
Kernel loadable modules in backtrace (with dependencies):
com.apple.iokit.AppleYukon(1.0.9b3)@0x9ed000
dependency: com.apple.iokit.IONetworkingFamily(1.5.1)@0x73b000
dependency: com.apple.iokit.IOPCIFamily(2.2)@0x60a000
dependency: com.apple.iokit.IOACPIFamily(1.2.0)@0x6b6000
com.apple.iokit.IONetworkingFamily(1.5.1)@0x73b000
Kernel version:
Darwin Kernel Version 8.8.2: Thu Sep 28 20:43:26 PDT 2006; root:xnu-792.14.14.obj~1/RELEASE_I386
我把相关行分开了。具体来说,你要找的是“内核可加载模块...”之后的第一行。在本例中,该项目是com.apple.iokit.AppleYukon(即以太网驱动程序/内核扩展),因此文件名为com.apple.iokit.AppleYukon.kext。
答案4
还要看看内存,损坏或其他内存故障很可能会导致那种随机的事情。
如果您可以将 DIMM 换入 x86 PC,请尝试使用 MemTest x86+ 查看是否存在任何明显的错误,尽管如果错误是随机的或足够模糊,MemTest 可以显示干净。