Appearance
故障排查
本章将介绍 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 故障排查的主要内容:
- 排查步骤:了解故障排查的基本方法
- 诊断工具:使用活动监视器、控制台等工具
- 启动问题:安全模式和恢复模式的使用
- 性能问题:CPU、内存、磁盘问题排查
- 网络问题:网络诊断和重置方法
- 应用问题:崩溃、无响应、权限问题
- 日志分析:查看和分析系统日志
- 系统修复:权限修复、NVRAM、SMC 重置
- 系统重装:恢复和重装系统
- 诊断脚本:自动化诊断工具
下一步
下一章我们将学习 自动化,了解 macOS 自动化工具的使用。
