注:如果当你看到“临时”两字,就忽略过去的话,你很可能错过了更多。
已经有很多人抱怨苹果的10.8.2系统的关机速度慢如牛了,而且无论硬盘是什么类型的(SSD或者HHD)都会出现同样的结果,比如这里和这里。当然,在Apple的官方论坛上,同样也是众多人抱怨关机慢问题。这里还有个网友的调查,可以看出这个不是小概率事件。这个慢给好多人带来了问题,想当初Snow
Leopard 10.6.x的时候,关机那是很快的,俗称秒关,相比较下,新系统真的令人遗憾。这个问题对果迷的影响,与其说是失望、困扰,不如说是一种不安,人们对苹果机的流畅运行已经是一种习以为常,但凡有丝毫的慢和顿挫,都会演变一种不安,随着越来越多人的抱怨在网上流行,人们的这种不安主见演变成了抱怨,现在看上去已经似乎人们已经被他折磨得都皮塌了,反而安静了不少。
当然有人声称能够彻底解决关机慢的问题;有的更比较谨慎地说是和大家分享自己的步骤,管不管用就看RP了,比如这里。国外也有人提出各种的方法来尝试解决这个问题。不过目前为止,没有一个方法是被公认可以彻底解决的,大家都在期待Apple官方可以给出一个彻底的真正的解决方案。据说,Apple会在下一个10.8.3中解决这个问题,不过他们目前似乎主要是正集中精力攻克图形核心/驱动程序/AirPlay/Wifi等核心方面的改善,让我们拭目以待。
目前来说,造成关机慢的主要原因可以分为OS X系统本身问题和应用软件问题。这两个的本质区别在于,前者造成系统退出后屏幕出现“旋转齿轮”(Spinning Gear,俗称无限菊花,甚至有人数圈数,称之20圈菊花等等)并等待很长时间,而后者是在系统退出之前,系统尝试退出所有当前运行中的程序的过程,说得更具体点就是,launchd本身退出之时(系统问题)或之前(应用软件问题)。应用软件问题我们这里无法给出任何的答案,Apple也无能为力。我们主要是讨论系统问题。
在后面我们给出一个靠谱的解决方案之前,我们来看看对一个系统问题应该如何入手。当我们去分析大家解决问题的思路的时候可以发现,有这样几个大致思路,有的从硬件入手,比如重置PRAM和SMC,内存等方法;有的是根据以往的解决大多数问题的思路开始着手,比如建议修复权限、禁止启动项等就是这个思路;有的是碰机会,比如关Wifi等。其实,他们都有可能,但是都没有抓住一个基本有效的方法。对于Troubleshooting的手段来说,几乎所有有经验的程序开发人员/系统管理人员等都会想到,系统日志logs,检查系统日志是排除故障的一大利器,尤其是系统级别的。其实早有网友就注意从这方面着手,可惜有点偏了没有找到重点。
要抓住重点,还要从系统的内部管理来说。OS X系统启动的基本步骤是这样的:
- 通电,Boot-ROM进行初始化。
- Boot-ROM后处理,此时是黑屏,电源LED灯亮,如果出现任何错误,LED灯会有规律闪动。
- 开始调用EFI:会听到咚的那一个长音。
- EFI启动:会响应用户键盘,比如进入单用户模式等按键。正常情况下,读取boot.efi正常后,出现银色的Apple标识。
- 启动内核:看到灰色背景和旋转齿轮。从这里开始,就可以从Activity Monitor程序中找到各个进程的关系了。
- 启动launchd:此时看到蓝屏。launchd负责启动和管理系统的各个服务
- login窗口出现:
- 用户登录:用户登录后,系统也是使用另外一个launchd来为该用户开启用户环境的,之后,用户的所有动作(除非特殊情况),都在这第二个launchd的管理之下。
现在让我们开启在/Applications/Utilities目录中的Activity Monitor程序,选择All Process, Hierarchically, 如下图,就可以看到各个进程之间的关系。核心总是占用任务ID 0的,而第一个launchd总是ID 1,用户launchd(下图中的ID 154)是ID 1的进程子进程。
既然启动是这个过程,那么退出/关机就是一个反过程。先关闭用户环境,就是用户launchd的退出过程;之后是系统退出过程,也就是ID 1的launchd的退出过程。所以,系统关闭慢的原因,应该是ID 1的launchd在关闭各个由他负责关闭的某个/某些服务的退出延迟造成的。当我们了解了这些之后,就可以着手分析了。
如何找到哪个服务进程退出延迟了呢?这就要看日志了,打开Console程序,在左边找到/var/log >> com.apple.launchd >> launchd-shutdown.system.log,之后,在右上角的查找中,输入timeout,就会出现如下图的画面,改图这是我修改之后的截图,在修改之前,两个服务的timeout时间, applevents是20 seconds, securityd是15秒。
这就找到了系统关闭奇慢的真正原因了,launchd给各个服务发出SIGKILL信号后,等待所有服务都退出后,才能退出,而由于一些服务退出超时,就造成整个系统关闭放慢。至于,这些服务为什么/什么情况下出现退出异常超时以及如何彻底解决之,我们只有让Apple的系统开发人员处理了,我们无从修复,不过我们可以通过给他设定退出超时时长来改变一下它的行为,这就需要一点对plist文件的知识了,具体的系统(launchd)如何定义和解读plist文件,我们不进行深入探讨,只给出方法,有兴趣的可以去developer.apple.com去读相关的文档。
综上所述,目前来说,比较靠谱的思路就是,给每个造成退出超时的系统服务设定一个比较短的退出超时时间(1或2秒)。
根据上面找到的两个服务来说,一个是com.apple.securityd,一个是com.apple.coreservices.appleevents。我们使用下面的命令来对他们进行处理。
sudo defaults write /System/Library/LaunchDaemons/com.apple.securityd ExitTimeOut -int 2
sudo defaults write /System/Library/LaunchDaemons/com.apple.coreservices.appleevents ExitTimeOut -int 1
如果系统询问,请输入当前管理员密码,以完成该命令。
之后,重新启动系统后,再次关机的时候,就可以实现"秒关",而看不到旋转菊花了。
当然,每个系统的情况不一样,造成缓慢的原因会不同,所以,每个人需要针对自己机器的情况来具体处理。
如果需要帮助,可以留言,并把上面Console中timeout的情况说明,我可以为大家具体写出命令。
备注:极个别的情况,上面的方法也可能不奏效。
分享到:
相关推荐
vagrant-osx:Mac OS X的Vagrant设置
ubuntu-usb-osx:在Mac上制作Ubuntu USB棒安装程序的Makefile
为Mac OSX安装FTK Imager git clone git@github.com:MrMugiwara/FTK-imager-OSX.git cd FTK-imager-OSX chmod +x ftkimager ./ftkimager --help如何在MAC OSX上使用FTK Imager Usage: ./ftkimager ...
Docker-OSX:Docker中的Mac! 在Docker中的本机OSX-KVM附近运行! X11转发!
项目 该存储库是我每天工作的日志。 资源资源 目录 (已更新) (更新) (更新) (新) (新) (已更新) (新)
AudioOuputSwitcher Audio Ouput切换器可在MacOS上轻松切换音频输出请注意,该软件包含一个守护程序错误,即使您杀死了该程序,它也不会关闭该程序。 请清除deamon plist,以便将其完全删除。
ros-install-osx:在OS X上安装ROS
tools-osx自述文件 摩根·阿尔德里奇( 总览 我多年来开发的一小部分Mac OS X命令行工具。 与NextStep和Mac OS X命令open , pbcopy和pbpaste ,这些工具中的大多数都是bash脚本,目的是磨练我的bash-fu。 其他人也...
科尔多瓦OSX CordovaLib是一个框架,使用户可以轻松地将Cordova纳入其OS X应用程序项目中,并且还可以创建基于Cordova的新OS X应用程序项目。 请注意,此cordova平台当前的重点是为OSX提供类似自助服务终端的应用...
Mac OS X的初始化如果要从github获取此脚本,则首先需要安装git。 您可以使用OS X的命令行工具来获得它。为此,您需要在终端上启动以下命令: xcode-select --install 之后,您需要在github上连接并添加您的SSH密钥...
在 Mac OSX 上为 mruby 交叉编译 在 Mac OSX 上交叉编译 mruby 的 osx、linux 或 win32 二进制文件。 通过mrbgems下载和安装 下载mrbgem git clone ...
installme-osx:我的个人脚本,用于设置新的OSX
设置OSX 在新安装的OSX上设置的第一件事。编码酿酒师/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" brew tap homebrew/cask brew tap homebrew/cask-...
苹果电脑安装Windows和Mac_OSX双系统
archey-osx:漂亮的macOS终端美化脚本
切换音频-osx 一个命令行实用程序,用于在Mac OS X上切换音频源。描述该实用程序可切换Mac OS X的音频源。 您指定音频源的名称,例如“内置数字输出”,该实用程序将立即切换源,而无需任何GUI交互。 这只是一个...
fish-shell-setup-osx:教程:Fish,Fisher,Powerline字体+ iTerm2
osxfuse 是一个google开源的mac osx 磁盘格式读写库。
OSX的扁平图标(但不仅限于此)预览 不要犹豫,要求您喜欢的应用程序图标,或留下您的反馈意见:)安装安装应用程序,文件夹,卷使用 。您必须才能在默认osx应用上安装图标好东西CODA-右键单击“ Coda应用程序”>...
MAC OSX 10.5图文教程 绝对清晰