前言
在性能测试中,top 和 htop 是非常有用的工具,可以帮助你实时监控系统资源的使用情况。这些工具可以让你了解 CPU、内存、磁盘 I/O 和网络 I/O 的使用情况,从而帮助你识别性能瓶颈和优化应用程序。
1. 实时监控系统资源
使用 top
启动 top:
top
主要关注点:
CPU 使用率:观察 %Cpu(s) 行,特别是 us(用户空间)、sy(系统空间)和 id(空闲)。
内存使用情况:查看 KiB Mem 和 KiB Swap 行,特别是 free 和 avail Mem。
进程列表:按 P 键以按 CPU 使用率排序,或按 M 键以按内存使用率排序。
交互式命令:
h 或 ?:显示帮助页面。
k:杀死进程(需要输入 PID)。
r:改变进程优先级(需要输入 PID 和新的 nice 值)。
q:退出 top。
1:显示每个 CPU 核心的使用情况。
f:进入字段管理器,可以选择要显示的列。
o:进入排序选项管理器。
W:将当前设置写入配置文件。
使用 htop
启动 htop:
htop
主要关注点:
CPU 使用率:顶部栏显示了每个 CPU 核心的使用情况。
内存使用情况:顶部栏还显示了内存和交换分区的使用情况。
进程列表:可以通过 F6 键选择不同的排序方式,如按 CPU 使用率、内存使用率等。
交互式命令:
F1:显示帮助页面。
F2:进入设置菜单。
F3:搜索进程。
F4:过滤进程。
F5:树状视图。
F6:选择排序方式。
F7 和 F8:增加或减少进程的 nice 值。
F9:杀死进程。
F10:退出 htop。
2. 监控特定进程
如果你知道要监控的进程 ID (PID),可以直接在 top 或 htop 中查看该进程的详细信息。
使用 top 监控特定进程:
top -p
例如:
top -p 1234
使用 htop 监控特定进程:
htop -p
例如:
htop -p 1234
3. 记录性能数据
在长时间运行的性能测试中,记录性能数据是非常重要的。你可以使用 top 或 htop 的批处理模式来记录数据。
使用 top 记录数据:
top -b -n 1 > top_output.txt
这会生成一个单次更新的数据快照,并将其保存到 top_output.txt 文件中。如果需要连续记录,可以结合 watch 命令:
watch -n 1 'top -b -n 1' > top_output.txt
使用 htop 记录数据:
htop 没有直接的批处理模式,但你可以使用脚本来实现类似的功能。例如,使用 script 命令:
script -c "htop" -t 2>&1 | tee htop_output.log
4. 分析数据
一旦你收集了足够的数据,就可以开始分析它们。你可以使用文本编辑器或专门的工具(如 gnuplot)来绘制图表,以便更直观地理解性能趋势。
5. 识别瓶颈
通过监控和记录数据,你可以识别出系统的瓶颈所在。常见的瓶颈包括:
CPU 使用率过高:检查哪些进程占用了大量 CPU 资源。
内存不足:检查哪些进程消耗了大量的内存。
磁盘 I/O 高:检查哪些进程进行了大量的磁盘读写操作。
网络 I/O 高:检查哪些进程发送或接收了大量的网络数据。
进阶
1. 详细 CPU 使用率分析
使用 top
按 CPU 使用率排序:
top -o %CPU
查看每个 CPU 核心的使用情况:
按 1 键显示每个 CPU 核心的使用情况。
检查用户空间和系统空间的 CPU 使用率:
在 %Cpu(s) 行中,us 表示用户空间的 CPU 使用率,sy 表示系统空间的 CPU 使用率。如果 sy 值很高,可能表示内核或驱动程序的问题;如果 us 值很高,可能表示应用程序的计算密集型任务。
使用 htop
按 CPU 使用率排序:
按 F6 键,选择 %CPU 进行排序。
查看每个 CPU 核心的使用情况:
顶部栏会显示每个 CPU 核心的使用情况。
2. 内存使用情况分析
使用 top
按内存使用率排序:
top -o %MEM
查看内存使用情况:
在 KiB Mem 行中,free 表示空闲内存,used 表示已用内存,buff/cache 表示缓存和缓冲区使用的内存。
检查交换分区使用情况:
在 KiB Swap 行中,used 表示已用交换空间,free 表示空闲交换空间。如果交换空间使用率高,可能表示内存不足。
使用 htop
按内存使用率排序:
按 F6 键,选择 %MEM 进行排序。
查看内存使用情况:
顶部栏会显示内存和交换分区的使用情况。
3. 磁盘 I/O 分析
使用 iostat 或 iotop
iostat 可以显示磁盘 I/O 的统计信息。
iostat -x 1
其中 -x 显示扩展统计信息,1 是更新间隔(秒)。
iotop 类似于 top,但专门用于显示磁盘 I/O 的使用情况。
iotop
4. 网络 I/O 分析
使用 iftop 或 nethogs
iftop 可以显示网络流量。
iftop
nethogs 可以显示每个进程的网络带宽使用情况。
nethogs
5. 详细进程分析
使用 top 和 htop
查看特定进程的详细信息:
在 top 或 htop 中,输入进程 ID (PID) 来查看特定进程的详细信息。
查看进程的线程:
在 htop 中,按 F5 键切换到树状视图,可以看到进程及其子进程的关系。
查看进程的命令行参数:
在 top 中,按 c 键显示完整的命令行路径。
在 htop 中,按 F2 进入设置菜单,选择“Display options”,勾选“Show custom thread names”。
6. 保存和分析日志
使用 top 的批处理模式
保存 top 输出到文件:
top -b -n 100 > top_output.txt
其中 -b 表示批处理模式,-n 100 表示记录 100 次更新。
定期记录 top 输出:
使用 cron 或 watch 定期记录 top 输出。
watch -n 5 'top -b -n 1' > top_output.txt
使用 htop 的脚本模式
使用 script 命令记录 htop 输出:
script -c "htop" -t 2>&1 | tee htop_output.log
7. 结合其他工具进行分析
使用 vmstat
vmstat 可以显示虚拟内存统计信息。
vmstat 1
其中 1 是更新间隔(秒)。
使用 mpstat
mpstat 可以显示每个 CPU 核心的统计信息。
mpstat -P ALL 1
其中 -P ALL 表示所有 CPU 核心,1 是更新间隔(秒)。
使用 sar
sysstat 包中的 sar 工具可以收集、报告和保存系统活动信息。
sar -u 1
其中 -u 表示 CPU 使用率,1 是更新间隔(秒)。
8. 生成图表
使用 gnuplot
gnuplot 可以将数据绘制成图表,便于可视化分析。
gnuplot -e "set terminal png; set output 'cpu_usage.png'; plot 'top_output.txt' using 1:9 with lines title 'CPU Usage'"
9. 性能优化建议
优化代码:改进算法,减少不必要的计算。
调整资源配置:增加 CPU 或内存资源。
负载均衡:分散负载到多个服务器。
缓存机制:引入缓存减少数据库或磁盘 I/O。
数据库优化:优化查询,索引设计,减少锁竞争。
网络优化:优化网络配置,减少网络延迟。