Skip to content

故障排查

本章将介绍 macOS 常见问题的排查方法,包括系统诊断、日志分析、问题修复等内容。

故障排查概述

排查步骤

text
故障排查基本步骤:
├── 1. 确认问题 - 了解问题的具体表现
├── 2. 收集信息 - 查看错误信息、日志
├── 3. 分析原因 - 根据信息分析可能的原因
├── 4. 制定方案 - 确定解决方案
├── 5. 实施修复 - 执行修复操作
└── 6. 验证结果 - 确认问题是否解决

常见问题类型

问题类型常见表现排查工具
启动问题无法开机、卡住安全模式、恢复模式
性能问题卡顿、慢活动监视器、top
网络问题无法上网、断网网络诊断、ping
应用问题崩溃、无响应控制台、强制退出
磁盘问题空间不足、错误磁盘工具、df
权限问题无法访问文件权限修复、ACL

系统诊断工具

活动监视器

bash
# 打开活动监视器
open -a "Activity Monitor"

# 使用 top 命令
top

# 按内存排序
top -o mem

# 按 CPU 排序
top -o cpu

# 查看特定进程
top -pid 1234

# 使用 htop(需安装)
brew install htop
htop

控制台

bash
# 打开控制台
open -a Console

# 查看系统日志
log show --last 1h

# 查看特定类型的日志
log show --predicate 'process == "kernel"' --last 1h

# 实时监控日志
log stream

# 过滤日志
log stream --predicate 'eventMessage contains "error"'

# 导出日志
log collect --output ~/Desktop/system_logs.logarchive

系统信息

bash
# 查看系统信息
system_profiler

# 查看硬件信息
system_profiler SPHardwareDataType

# 查看软件信息
system_profiler SPSoftwareDataType

# 查看内存信息
system_profiler SPMemoryDataType

# 查看存储信息
system_profiler SPStorageDataType

# 查看网络信息
system_profiler SPNetworkDataType

启动问题排查

安全模式

text
进入安全模式:

Apple Silicon Mac:
1. 关机
2. 按住电源按钮直到看到启动选项
3. 选择启动磁盘
4. 按住 Shift 键点击"继续"

Intel Mac:
1. 关机
2. 开机时按住 Shift 键
3. 看到登录窗口后松开

安全模式特点:
├── 禁用第三方启动项
├── 禁用第三方字体
├── 禁用第三方内核扩展
├── 清理系统缓存
└── 运行磁盘检查

恢复模式

text
进入恢复模式:

Apple Silicon Mac:
1. 关机
2. 按住电源按钮直到看到"正在载入启动选项"
3. 选择"选项",点击"继续"

Intel Mac:
1. 关机
2. 开机时按住 Command + R
3. 直到看到 Apple 标志

恢复模式功能:
├── 从 Time Machine 恢复
├── 重新安装 macOS
├── 磁盘工具
├── 终端
└── 网络工具

启动项管理

bash
# 查看启动项
ls ~/Library/LaunchAgents/
ls /Library/LaunchAgents/
ls /Library/LaunchDaemons/

# 禁用启动项
launchctl unload ~/Library/LaunchAgents/com.example.app.plist

# 启用启动项
launchctl load ~/Library/LaunchAgents/com.example.app.plist

# 查看登录项
osascript -e 'tell application "System Events" to get the name of every login item'

# 删除登录项
osascript -e 'tell application "System Events" to delete login item "App"'

性能问题排查

CPU 问题

bash
# 查看 CPU 使用率
top -l 1 | head -n 10

# 查看高 CPU 进程
ps aux | sort -nrk 3 | head -10

# 使用 top 持续监控
top -o cpu

# 查看进程详情
ps -p PID -o pid,ppid,user,%cpu,%mem,comm

# 结束进程
kill PID
kill -9 PID  # 强制结束

# 查看线程
ps -M -p PID

内存问题

bash
# 查看内存使用
vm_stat

# 查看内存压力
memory_pressure

# 查看进程内存使用
ps aux | sort -nrk 4 | head -10

# 查看系统内存信息
system_profiler SPMemoryDataType

# 清理内存缓存
sudo purge

# 查看交换文件使用
sysctl vm.swapusage

磁盘问题

bash
# 查看磁盘空间
df -h

# 查看目录大小
du -sh ~

# 查看大文件
find ~ -size +100M -type f 2>/dev/null

# 查看磁盘 I/O
iostat

# 检查磁盘
diskutil verifyVolume /

# 修复磁盘
diskutil repairVolume /

# 查看磁盘健康
diskutil info disk0

网络问题排查

基本网络诊断

bash
# 检查网络连接
ping -c 5 8.8.8.8
ping -c 5 www.baidu.com

# 检查 DNS
nslookup www.baidu.com
dig www.baidu.com

# 追踪路由
traceroute www.baidu.com

# 检查端口
nc -zv www.baidu.com 80

# 查看网络接口
ifconfig

# 查看路由表
netstat -rn

# 查看 DNS 配置
scutil --dns

网络重置

bash
# 刷新 DNS 缓存
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder

# 重置网络接口
sudo ifconfig en0 down
sudo ifconfig en0 up

# 重置 Wi-Fi
networksetup -setairportpower en0 off
sleep 2
networksetup -setairportpower en0 on

# 删除网络配置
sudo rm /Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist
sudo rm /Library/Preferences/SystemConfiguration/NetworkInterfaces.plist

# 重启网络服务
sudo launchctl unload /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
sudo launchctl load /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist

应用问题排查

应用崩溃

bash
# 查看崩溃日志
ls ~/Library/Logs/DiagnosticReports/

# 查看特定应用的崩溃日志
ls ~/Library/Logs/DiagnosticReports/ | grep "应用名"

# 查看最近的崩溃
ls -lt ~/Library/Logs/DiagnosticReports/ | head -10

# 查看系统崩溃日志
ls /Library/Logs/DiagnosticReports/

# 使用控制台查看崩溃
open -a Console
# 选择"用户报告"或"系统报告"

应用无响应

bash
# 查看无响应的应用
ps aux | grep -i "not responding"

# 强制退出应用
killall 应用名
kill -9 PID

# 使用强制退出窗口
# Command + Option + Esc

# 查看应用进程
ps aux | grep 应用名

# 查看应用线程
sample PID 3

应用权限问题

bash
# 重置应用权限
tccutil reset All

# 重置特定权限
tccutil reset Camera
tccutil reset Microphone
tccutil reset Accessibility

# 检查应用签名
codesign --verify --deep --strict /Applications/App.app

# 重新签名应用
codesign --deep --force --sign - /Applications/App.app

# 移除隔离属性
sudo xattr -rd com.apple.quarantine /Applications/App.app

系统日志分析

日志类型

text
macOS 日志位置:

系统日志:
├── /var/log/
├── ~/Library/Logs/
└── /Library/Logs/

崩溃日志:
├── ~/Library/Logs/DiagnosticReports/
└── /Library/Logs/DiagnosticReports/

安装日志:
├── /var/log/install.log
└── /var/log/system.log

启动日志:
└── log show --predicate 'eventMessage contains "Boot"'

应用日志:
└── ~/Library/Logs/应用名/

日志查看

bash
# 查看系统日志
log show --last 1h

# 查看特定级别的日志
log show --predicate 'messageType == error' --last 1h

# 查看特定进程的日志
log show --predicate 'process == "kernel"' --last 1h

# 搜索日志
log show --predicate 'eventMessage contains "error"' --last 1d

# 导出日志
log collect --output ~/Desktop/logs.logarchive --last 1h

# 实时监控
log stream --predicate 'messageType == error'

系统修复

修复磁盘权限

bash
# 在恢复模式下修复权限
# 1. 进入恢复模式
# 2. 打开终端
# 3. 执行以下命令

# 修复用户权限
diskutil resetUserPermissions / `id -u`

# 修复主目录权限
chmod -R -N ~
chmod -R +a "用户名 allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown,file_inherit,directory_inherit" ~

重置 NVRAM/PRAM

text
重置 NVRAM(Intel Mac):
1. 关机
2. 开机时按住 Command + Option + P + R
3. 按住约 20 秒后松开
4. 等待系统启动

NVRAM 存储的信息:
├── 音量设置
├── 屏幕分辨率
├── 启动磁盘选择
├── 时区
└── 内核恐慌信息

Apple Silicon Mac:
NVRAM 在每次关机时自动重置

重置 SMC

text
重置 SMC(系统管理控制器):

Intel MacBook(不可拆卸电池):
1. 关机
2. 按住 Shift + Control + Option + 电源键 10 秒
3. 松开所有键
4. 开机

Intel Mac mini/Pro/iMac:
1. 关机
2. 拔掉电源线
3. 等待 15 秒
4. 插回电源线
5. 等待 5 秒后开机

Apple Silicon Mac:
只需重启即可

SMC 管理的功能:
├── 电池和电源
├── 风扇和温度
├── 睡眠和唤醒
├── LED 指示灯
└── 电源按钮

系统重装

互联网恢复

text
互联网恢复(Intel Mac):
1. 关机
2. 按住 Command + Option + R
3. 连接 Wi-Fi
4. 等待加载恢复镜像

Apple Silicon Mac:
1. 关机
2. 按住电源按钮
3. 选择"选项"

恢复选项:
├── 重新安装 macOS(保留数据)
├── 抹掉磁盘后安装(全新安装)
└── 从 Time Machine 恢复

创建可启动安装盘

bash
# 下载 macOS 安装程序
# 从 App Store 下载

# 创建可启动安装盘
sudo /Applications/Install\ macOS\ Sonoma.app/Contents/Resources/createinstallmedia \
  --volume /Volumes/MyVolume

# 从安装盘启动
# Intel Mac: 按住 Option 键
# Apple Silicon: 按住电源按钮

诊断脚本

系统诊断脚本

bash
#!/bin/bash
# macOS 系统诊断脚本

echo "=== macOS 系统诊断报告 ==="
echo "生成时间: $(date)"

# 系统信息
echo -e "\n[系统信息]"
sw_vers
system_profiler SPHardwareDataType | grep -E "Model|Processor|Memory|Serial"

# 存储空间
echo -e "\n[存储空间]"
df -h | grep -E "Filesystem|/$"

# 内存使用
echo -e "\n[内存使用]"
vm_stat | head -10

# CPU 负载
echo -e "\n[CPU 负载]"
top -l 1 | head -n 10

# 网络状态
echo -e "\n[网络状态]"
networksetup -listallnetworkservices
ifconfig en0 | grep "inet "

# 进程状态
echo -e "\n[高 CPU 进程]"
ps aux | sort -nrk 3 | head -5

echo -e "\n[高内存进程]"
ps aux | sort -nrk 4 | head -5

# 安全状态
echo -e "\n[安全状态]"
echo "SIP: $(csrutil status)"
echo "Gatekeeper: $(spctl --status)"
echo "FileVault: $(fdesetup status)"

# 最近错误
echo -e "\n[最近系统错误]"
log show --predicate 'messageType == error' --last 1h | head -10

echo -e "\n=== 诊断完成 ==="

小结

本章介绍了 macOS 故障排查的主要内容:

  1. 排查步骤:了解故障排查的基本方法
  2. 诊断工具:使用活动监视器、控制台等工具
  3. 启动问题:安全模式和恢复模式的使用
  4. 性能问题:CPU、内存、磁盘问题排查
  5. 网络问题:网络诊断和重置方法
  6. 应用问题:崩溃、无响应、权限问题
  7. 日志分析:查看和分析系统日志
  8. 系统修复:权限修复、NVRAM、SMC 重置
  9. 系统重装:恢复和重装系统
  10. 诊断脚本:自动化诊断工具

下一步

下一章我们将学习 自动化,了解 macOS 自动化工具的使用。