MacOS监控CPU占用脚本
如何使用 Bash 脚本监控 macOS 系统的 CPU 占用情况
在 macOS 系统中,了解各个进程的 CPU 占用情况 是一种重要的性能优化手段。对于开发者和系统管理员来说,时刻了解哪些应用占用了大量资源,可以帮助解决性能瓶颈。本篇文章将带你通过一个简单的 Bash 脚本,定期记录并保存系统中最消耗 CPU 资源的进程,便于后期分析和优化。
1. 脚本概述
我们将通过一个简单的 Bash 脚本,定期获取系统中各个进程的 CPU 占用情况,并将输出写入指定的日志文件。脚本运行时,会自动收集数据并将其存储在 /日志路径/cpu_usage_log.txt
文件中。
2. 脚本内容
#!/bin/bash
log_file="/日志路径/cpu_usage_log.txt"
echo "=== CPU USAGE LOG STARTED AT $(date) ===" >> "$log_file"
while true; do
echo "=== $(date) ===" >> "$log_file"
# macOS 用 ps + sort
ps -arcwwwxo pid,%cpu,command | head -n 1 >> "$log_file" # 表头
ps -arcwwwxo pid,%cpu,command | tail -n +2 | sort -k 2 -nr | head -n 10 >> "$log_file"
sleep 1
done
3. 脚本解释
3.1 定义日志文件路径
log_file="/日志路径/cpu_usage_log.txt"
在这行代码中,我们指定了日志文件的路径。你可以根据需要修改这个路径,让日志文件保存到你希望的位置。
3.2 写入日志文件头部
echo "=== CPU USAGE LOG STARTED AT $(date) ===" >> "$log_file"
脚本开始时,会在日志文件中记录当前的日期和时间,标识日志的开始。
3.3 监控进程的 CPU 使用情况
ps -arcwwwxo pid,%cpu,command | head -n 1 >> "$log_file" # 表头
ps -arcwwwxo pid,%cpu,command | tail -n +2 | sort -k 2 -nr | head -n 10 >> "$log_file"
ps -arcwwwxo pid,%cpu,command
:获取所有进程的 PID、CPU 占用率、命令名。head -n 1
:输出表头(字段名称),并写入日志。tail -n +2
:跳过表头,获取进程信息。sort -k 2 -nr
:按 CPU 占用率 从高到低排序。head -n 10
:只显示前 10 个最消耗 CPU 的进程。
3.4 每隔 1 秒获取一次数据
sleep 1
脚本将会每秒钟获取一次进程的 CPU 占用情况,并将其记录到日志中。你可以根据需要调整间隔时间,例如调整为 sleep 10
以每 10 秒记录一次数据。
3.5 无限循环监控
while true; do
...
done
脚本会不断地循环执行,直到你手动终止它。它会持续获取 CPU 占用情况并将结果追加到日志文件中。
4. 如何使用该脚本
4.1 保存脚本
将上述脚本内容保存为一个名为 cpu_usage_monitor.sh
的文件。你可以通过文本编辑器(如 Visual Studio Code 或 Sublime Text)来创建并保存该文件。
4.2 添加执行权限
为了能够执行该脚本,你需要为它添加执行权限。在终端中运行以下命令:
chmod +x /path/to/cpu_usage_monitor.sh
确保脚本路径正确,并且文件具有可执行权限。
4.3 运行脚本
在终端中运行脚本:
./cpu_usage_monitor.sh
如果你希望在后台运行该脚本,可以使用 nohup
命令:
nohup ./cpu_usage_monitor.sh &
这样脚本会在后台持续运行,输出结果将保存在 nohup.out
文件中。
4.4 停止脚本
要停止脚本的执行,可以通过 Ctrl + C
来中断脚本,或者在终端中找到该进程并结束它:
ps aux | grep cpu_usage_monitor.sh
kill <PID>
其中 <PID>
是脚本进程的 ID。
5. 查看日志
脚本会将每秒钟获取的 CPU 占用情况写入到指定的日志文件中。日志文件的内容格式如下:
=== CPU USAGE LOG STARTED AT Thu Jul 9 17:05:33 UTC 2025 ===
=== Thu Jul 9 17:05:33 UTC 2025 ===
PID %CPU COMMAND
123 25.5 /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
456 10.1 /Applications/Visual Studio Code.app/Contents/MacOS/Electron
...
=== Thu Jul 9 17:05:34 UTC 2025 ===
PID %CPU COMMAND
123 24.0 /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
789 9.5 /Applications/Safari.app/Contents/MacOS/Safari
...
每次记录的内容包括:
- 时间戳:每次记录的日期和时间。
- PID:进程 ID。
- %CPU:进程占用的 CPU 百分比。
- COMMAND:正在执行的命令(即应用名称)。
6. 脚本扩展
6.1 修改时间间隔
如果你希望每隔更长时间获取一次数据,可以修改 sleep
命令的参数,例如每 10 秒记录一次:
sleep 10
6.2 修改记录的进程数
你可以根据需要调整脚本记录的进程数量。例如,如果你希望查看前 5 个最占 CPU 的进程,只需修改脚本中的 head -n 10
为 head -n 5
。
6.3 仅记录特定进程
如果你只关心某些特定进程(例如 Chrome 或 VS Code),你可以使用 grep
来筛选特定的进程:
ps -arcwwwxo pid,%cpu,command | grep "Chrome" | sort -k 2 -nr | head -n 10 >> "$log_file"
7. 总结
通过上述 Bash 脚本,你可以轻松地监控和记录 macOS 系统中的 CPU 占用情况,帮助你找到哪些进程占用了过多的系统资源,从而进行优化或调整。此脚本可以根据需要进行扩展,满足不同的监控需求。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。