OS X“死亡螺旋”?无法启动新进程,最终变得无法使用

OS X“死亡螺旋”?无法启动新进程,最终变得无法使用

我时不时就会遇到这种奇怪的情况。

我的 OS X (Snow Leopard) 系统将无法执行任何“新”操作。它无法启动任何新进程(例如,新应用程序或新 bash 进程)之前没有加载过. 已经运行的事物可能能够启动再次...但是如果它超出了缓存(可能?)它就只是挂在那里。

最终整个系统逐个应用程序、逐个进程地退化,直到没有什么响应(包括 Finder、UI 等)并且我必须进行硬电源循环。

有什么想法吗?当它发生时,我甚至无法启动活动监视器,或者top它们是否尚未运行,因此很难确定。

答案1

控制台日志、系统日志和内核日志说了什么?更好的方法是,使用sudo syslog | more转储整个系统日志消息数据库(警告:大量输出),并查找问题发生时的任何消息。

另外,还可以在 /Library/Logs/DiagnosticReports 中查找问题发生时的崩溃或旋转转储。

请考虑使用此输出更新您的问题,或在 Pastebin.com 或 gist.github.com 上链接到它。也许我们可以帮您解决问题。

你没有安装“Mozy”或“Hands Off!”,对吧?我最近帮助解决了一些具有类似症状的问题,这些问题归结于这些软件包的错误行为:

获取控制台消息:ipc_kmsg_copyout_header:无法增加用户 ipc 空间。这里有 Mac OS X 内核专家吗?

某些 Mac 应用程序频繁崩溃,回溯中出现“__THE_SYSTEM_HAS_NO_PORT_SETS_AVAILABLE__”

答案2

这听起来很像我遇到的、Spiff 帮助我解决的问题: 获取控制台消息:ipc_kmsg_copyout_header:无法增加用户 ipc 空间。这里有 Mac OS X 内核专家吗?

我将分享一个我编写的 shell 脚本,用于帮助追踪哪个进程可能占用了 ipc 端口。它会定期将格式化的 top 输出记录到文件中,您可以在计算机锁定并重新启动后检查它。抱歉,它很丑

#!/usr/bin/env bash
# port_profile.sh [output_file_path]
#   use top to profile port usage for processes every 10 minutes (600s)
args=("$@")
sleep_time=600
if [ "$#" -eq 0 ]
    then
        outfile="port_profile.txt"
    else
        outfile="$@"
fi
(while true; do
    data=`top -o ports -stats ports,command,pid,msgsent,msgrecv,user,uid, -l 1 | grep -v 'CPU\|Disks\|LoadAvg\|Load Avg\|MemRegions\|Networks\|PhysMem\|Procs\|Processes\|SharedLibs\|Threads\|Time\|VirtMem\|VM\|Swap\|Purgeable'`
    while read -r line; do
        echo -e "$line"
    done <<< "$data"
    echo -e ""
    sleep $sleep_time
done) >> $outfile &

答案3

通过将“lsof”命令输出到文本文件以列出所有正在运行的进程中当前打开的文件和套接字,我发现应用程序正在打开大量进程间通信套接字并且操作系统已达到其限制:

lsof > ~/lsof.txt

许多进程都会打开大量文件和套接字,但 3connect 应用程序似乎比其他任何应用程序打开的文件和套接字都多得多,所以我删除了它。从那时起,机器就一直很好。

相关内容